Files
weeklyreport/backend/api/project/list.get.ts
2026-01-04 20:58:47 +09:00

54 lines
1.6 KiB
TypeScript

import { query } from '../../utils/db'
/**
* 프로젝트 목록 조회
* GET /api/project/list
*/
export default defineEventHandler(async (event) => {
const queryParams = getQuery(event)
const status = queryParams.status as string || null
let sql = `
SELECT p.*,
(SELECT employee_name FROM wr_employee_info e
JOIN wr_project_manager_history pm ON e.employee_id = pm.employee_id
WHERE pm.project_id = p.project_id AND pm.role_type = 'PM'
AND (pm.end_date IS NULL OR pm.end_date >= CURRENT_DATE)
LIMIT 1) as pm_name,
(SELECT employee_name FROM wr_employee_info e
JOIN wr_project_manager_history pm ON e.employee_id = pm.employee_id
WHERE pm.project_id = p.project_id AND pm.role_type = 'PL'
AND (pm.end_date IS NULL OR pm.end_date >= CURRENT_DATE)
LIMIT 1) as pl_name
FROM wr_project_info p
`
const params: any[] = []
if (status) {
sql += ' WHERE p.project_status = $1'
params.push(status)
}
sql += ' ORDER BY p.created_at DESC'
const projects = await query(sql, params)
return {
projects: projects.map((p: any) => ({
projectId: p.project_id,
projectCode: p.project_code,
projectName: p.project_name,
projectType: p.project_type || 'SI',
clientName: p.client_name,
projectDescription: p.project_description,
startDate: p.start_date,
endDate: p.end_date,
contractAmount: p.contract_amount,
projectStatus: p.project_status,
pmName: p.pm_name,
plName: p.pl_name,
createdAt: p.created_at
}))
}
})