기능구현중
This commit is contained in:
24
server/api/vcs-server/[id]/delete.delete.ts
Normal file
24
server/api/vcs-server/[id]/delete.delete.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { execute, queryOne, query } from '../../../utils/db'
|
||||
|
||||
/**
|
||||
* VCS 서버 삭제
|
||||
* DELETE /api/vcs-server/[id]/delete
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const serverId = Number(getRouterParam(event, 'id'))
|
||||
|
||||
const existing = await queryOne('SELECT * FROM wr_vcs_server WHERE server_id = $1', [serverId])
|
||||
if (!existing) {
|
||||
throw createError({ statusCode: 404, message: 'VCS 서버를 찾을 수 없습니다.' })
|
||||
}
|
||||
|
||||
// 연결된 계정이 있는지 확인
|
||||
const accounts = await query('SELECT COUNT(*) as cnt FROM wr_employee_vcs_account WHERE server_id = $1', [serverId])
|
||||
if (parseInt(accounts[0]?.cnt) > 0) {
|
||||
throw createError({ statusCode: 400, message: '연결된 VCS 계정이 있어 삭제할 수 없습니다. 먼저 계정을 삭제하거나 비활성화해주세요.' })
|
||||
}
|
||||
|
||||
await execute('DELETE FROM wr_vcs_server WHERE server_id = $1', [serverId])
|
||||
|
||||
return { success: true, message: 'VCS 서버가 삭제되었습니다.' }
|
||||
})
|
||||
34
server/api/vcs-server/[id]/detail.get.ts
Normal file
34
server/api/vcs-server/[id]/detail.get.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { queryOne } from '../../../utils/db'
|
||||
|
||||
/**
|
||||
* VCS 서버 상세 조회
|
||||
* GET /api/vcs-server/[id]/detail
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const serverId = Number(getRouterParam(event, 'id'))
|
||||
|
||||
const server = await queryOne(`
|
||||
SELECT s.*, e.employee_name as created_by_name
|
||||
FROM wr_vcs_server s
|
||||
LEFT JOIN wr_employee_info e ON s.created_by = e.employee_id
|
||||
WHERE s.server_id = $1
|
||||
`, [serverId])
|
||||
|
||||
if (!server) {
|
||||
throw createError({ statusCode: 404, message: 'VCS 서버를 찾을 수 없습니다.' })
|
||||
}
|
||||
|
||||
return {
|
||||
server: {
|
||||
serverId: server.server_id,
|
||||
serverName: server.server_name,
|
||||
serverType: server.server_type,
|
||||
serverUrl: server.server_url,
|
||||
description: server.description,
|
||||
isActive: server.is_active,
|
||||
createdAt: server.created_at,
|
||||
updatedAt: server.updated_at,
|
||||
createdByName: server.created_by_name
|
||||
}
|
||||
}
|
||||
})
|
||||
67
server/api/vcs-server/[id]/update.put.ts
Normal file
67
server/api/vcs-server/[id]/update.put.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { execute, queryOne } from '../../../utils/db'
|
||||
import { getCurrentUserId } from '../../../utils/user'
|
||||
|
||||
interface UpdateBody {
|
||||
serverName?: string
|
||||
serverType?: string
|
||||
serverUrl?: string
|
||||
description?: string
|
||||
isActive?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* VCS 서버 수정
|
||||
* PUT /api/vcs-server/[id]/update
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const serverId = Number(getRouterParam(event, 'id'))
|
||||
const body = await readBody<UpdateBody>(event)
|
||||
const userId = await getCurrentUserId(event)
|
||||
|
||||
const existing = await queryOne('SELECT * FROM wr_vcs_server WHERE server_id = $1', [serverId])
|
||||
if (!existing) {
|
||||
throw createError({ statusCode: 404, message: 'VCS 서버를 찾을 수 없습니다.' })
|
||||
}
|
||||
|
||||
const updates: string[] = []
|
||||
const values: any[] = []
|
||||
let paramIndex = 1
|
||||
|
||||
if (body.serverName !== undefined) {
|
||||
updates.push(`server_name = $${paramIndex++}`)
|
||||
values.push(body.serverName)
|
||||
}
|
||||
|
||||
if (body.serverType !== undefined) {
|
||||
updates.push(`server_type = $${paramIndex++}`)
|
||||
values.push(body.serverType)
|
||||
}
|
||||
|
||||
if (body.serverUrl !== undefined) {
|
||||
updates.push(`server_url = $${paramIndex++}`)
|
||||
values.push(body.serverUrl)
|
||||
}
|
||||
|
||||
if (body.description !== undefined) {
|
||||
updates.push(`description = $${paramIndex++}`)
|
||||
values.push(body.description)
|
||||
}
|
||||
|
||||
if (body.isActive !== undefined) {
|
||||
updates.push(`is_active = $${paramIndex++}`)
|
||||
values.push(body.isActive)
|
||||
}
|
||||
|
||||
if (updates.length === 0) {
|
||||
return { success: true, message: '변경된 내용이 없습니다.' }
|
||||
}
|
||||
|
||||
updates.push(`updated_at = NOW()`, `updated_by = $${paramIndex++}`)
|
||||
values.push(userId, serverId)
|
||||
|
||||
await execute(`
|
||||
UPDATE wr_vcs_server SET ${updates.join(', ')} WHERE server_id = $${paramIndex}
|
||||
`, values)
|
||||
|
||||
return { success: true }
|
||||
})
|
||||
52
server/api/vcs-server/create.post.ts
Normal file
52
server/api/vcs-server/create.post.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { insertReturning } from '../../utils/db'
|
||||
import { getCurrentUserId } from '../../utils/user'
|
||||
|
||||
interface CreateBody {
|
||||
serverName: string
|
||||
serverType: string // git | svn
|
||||
serverUrl: string
|
||||
description?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* VCS 서버 등록
|
||||
* POST /api/vcs-server/create
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody<CreateBody>(event)
|
||||
const userId = await getCurrentUserId(event)
|
||||
|
||||
if (!body.serverName?.trim()) {
|
||||
throw createError({ statusCode: 400, message: '서버명을 입력해주세요.' })
|
||||
}
|
||||
|
||||
if (!body.serverType || !['git', 'svn'].includes(body.serverType)) {
|
||||
throw createError({ statusCode: 400, message: '서버 유형을 선택해주세요 (git/svn).' })
|
||||
}
|
||||
|
||||
if (!body.serverUrl?.trim()) {
|
||||
throw createError({ statusCode: 400, message: '서버 URL을 입력해주세요.' })
|
||||
}
|
||||
|
||||
const result = await insertReturning(`
|
||||
INSERT INTO wr_vcs_server (server_name, server_type, server_url, description, is_active, created_by)
|
||||
VALUES ($1, $2, $3, $4, true, $5)
|
||||
RETURNING *
|
||||
`, [
|
||||
body.serverName.trim(),
|
||||
body.serverType,
|
||||
body.serverUrl.trim(),
|
||||
body.description || null,
|
||||
userId
|
||||
])
|
||||
|
||||
return {
|
||||
success: true,
|
||||
server: {
|
||||
serverId: result.server_id,
|
||||
serverName: result.server_name,
|
||||
serverType: result.server_type,
|
||||
serverUrl: result.server_url
|
||||
}
|
||||
}
|
||||
})
|
||||
37
server/api/vcs-server/list.get.ts
Normal file
37
server/api/vcs-server/list.get.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { query } from '../../utils/db'
|
||||
|
||||
/**
|
||||
* VCS 서버 목록 조회
|
||||
* GET /api/vcs-server/list
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const params = getQuery(event)
|
||||
const includeInactive = params.includeInactive === 'true'
|
||||
|
||||
const conditions = includeInactive ? [] : ['is_active = true']
|
||||
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''
|
||||
|
||||
const servers = await query(`
|
||||
SELECT
|
||||
s.*,
|
||||
e.employee_name as created_by_name
|
||||
FROM wr_vcs_server s
|
||||
LEFT JOIN wr_employee_info e ON s.created_by = e.employee_id
|
||||
${whereClause}
|
||||
ORDER BY s.server_name
|
||||
`, [])
|
||||
|
||||
return {
|
||||
servers: servers.map((s: any) => ({
|
||||
serverId: s.server_id,
|
||||
serverName: s.server_name,
|
||||
serverType: s.server_type,
|
||||
serverUrl: s.server_url,
|
||||
description: s.description,
|
||||
isActive: s.is_active,
|
||||
createdAt: s.created_at,
|
||||
updatedAt: s.updated_at,
|
||||
createdByName: s.created_by_name
|
||||
}))
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user