65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import { query } from '../../../utils/db'
|
|
|
|
/**
|
|
* 주간보고 연계용 유지보수 업무 조회
|
|
* 해당 주차에 완료된 유지보수 업무 목록
|
|
* GET /api/maintenance/report/available
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const params = getQuery(event)
|
|
const projectId = params.projectId ? Number(params.projectId) : null
|
|
const weekStartDate = params.weekStartDate as string
|
|
const weekEndDate = params.weekEndDate as string
|
|
|
|
if (!projectId) {
|
|
throw createError({ statusCode: 400, message: '프로젝트 ID가 필요합니다.' })
|
|
}
|
|
|
|
// 해당 주차에 완료된 유지보수 업무 (아직 주간보고에 연결 안 된 것)
|
|
const sql = `
|
|
SELECT
|
|
m.task_id,
|
|
m.request_date,
|
|
m.request_title,
|
|
m.request_content,
|
|
m.requester_name,
|
|
m.task_type,
|
|
m.priority,
|
|
m.status,
|
|
m.resolution_content,
|
|
m.dev_completed_at,
|
|
m.ops_completed_at,
|
|
m.client_confirmed_at,
|
|
m.weekly_report_id
|
|
FROM wr_maintenance_task m
|
|
WHERE m.project_id = $1
|
|
AND m.status = 'COMPLETED'
|
|
AND m.weekly_report_id IS NULL
|
|
AND (
|
|
(m.dev_completed_at >= $2 AND m.dev_completed_at <= $3)
|
|
OR (m.ops_completed_at >= $2 AND m.ops_completed_at <= $3)
|
|
OR (m.client_confirmed_at >= $2 AND m.client_confirmed_at <= $3)
|
|
)
|
|
ORDER BY m.dev_completed_at DESC NULLS LAST, m.task_id DESC
|
|
`
|
|
|
|
const tasks = await query(sql, [projectId, weekStartDate, weekEndDate + ' 23:59:59'])
|
|
|
|
return {
|
|
tasks: tasks.map((t: any) => ({
|
|
taskId: t.task_id,
|
|
requestDate: t.request_date,
|
|
requestTitle: t.request_title,
|
|
requestContent: t.request_content,
|
|
requesterName: t.requester_name,
|
|
taskType: t.task_type,
|
|
priority: t.priority,
|
|
status: t.status,
|
|
resolutionContent: t.resolution_content,
|
|
devCompletedAt: t.dev_completed_at,
|
|
opsCompletedAt: t.ops_completed_at,
|
|
clientConfirmedAt: t.client_confirmed_at
|
|
}))
|
|
}
|
|
})
|