작업계획서대로 진행

This commit is contained in:
2026-01-11 10:50:51 +09:00
parent 5cda181cc5
commit d4620dc1fa
39 changed files with 3344 additions and 120 deletions

View 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 서버가 삭제되었습니다.' }
})

View 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
}
}
})

View 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 }
})