작업계획서대로 진행
This commit is contained in:
78
backend/api/maintenance/report/link.post.ts
Normal file
78
backend/api/maintenance/report/link.post.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { insertReturning, execute, query } from '../../../utils/db'
|
||||
import { getClientIp } from '../../../utils/ip'
|
||||
import { getCurrentUserEmail } from '../../../utils/user'
|
||||
|
||||
interface TaskItem {
|
||||
description: string
|
||||
sourceTaskIds: number[]
|
||||
taskType: string
|
||||
taskHours?: number
|
||||
}
|
||||
|
||||
interface LinkBody {
|
||||
reportId: number
|
||||
projectId: number
|
||||
tasks: TaskItem[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 유지보수 업무를 주간보고 실적으로 등록
|
||||
* POST /api/maintenance/report/link
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody<LinkBody>(event)
|
||||
const clientIp = getClientIp(event)
|
||||
const userEmail = await getCurrentUserEmail(event)
|
||||
|
||||
if (!body.reportId || !body.projectId) {
|
||||
throw createError({ statusCode: 400, message: '보고서 ID와 프로젝트 ID가 필요합니다.' })
|
||||
}
|
||||
|
||||
if (!body.tasks || body.tasks.length === 0) {
|
||||
throw createError({ statusCode: 400, message: '등록할 실적이 없습니다.' })
|
||||
}
|
||||
|
||||
const insertedTaskIds: number[] = []
|
||||
const linkedMaintenanceIds: number[] = []
|
||||
|
||||
for (const task of body.tasks) {
|
||||
// 주간보고 실적 등록
|
||||
const result = await insertReturning(`
|
||||
INSERT INTO wr_weekly_report_task (
|
||||
report_id, project_id, task_type, task_description, task_hours,
|
||||
is_completed, created_ip, created_email
|
||||
) VALUES ($1, $2, $3, $4, $5, true, $6, $7)
|
||||
RETURNING task_id
|
||||
`, [
|
||||
body.reportId,
|
||||
body.projectId,
|
||||
task.taskType || 'other',
|
||||
task.description,
|
||||
task.taskHours || null,
|
||||
clientIp,
|
||||
userEmail
|
||||
])
|
||||
|
||||
const newTaskId = result.task_id
|
||||
insertedTaskIds.push(newTaskId)
|
||||
|
||||
// 유지보수 업무와 연결
|
||||
if (task.sourceTaskIds && task.sourceTaskIds.length > 0) {
|
||||
for (const maintenanceTaskId of task.sourceTaskIds) {
|
||||
await execute(`
|
||||
UPDATE wr_maintenance_task
|
||||
SET weekly_report_id = $1, updated_at = NOW()
|
||||
WHERE task_id = $2 AND weekly_report_id IS NULL
|
||||
`, [body.reportId, maintenanceTaskId])
|
||||
linkedMaintenanceIds.push(maintenanceTaskId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
insertedCount: insertedTaskIds.length,
|
||||
linkedMaintenanceCount: linkedMaintenanceIds.length,
|
||||
taskIds: insertedTaskIds
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user