71 lines
2.1 KiB
TypeScript
71 lines
2.1 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
|
|
const businessId = queryParams.businessId ? Number(queryParams.businessId) : null
|
|
|
|
let sql = `
|
|
SELECT p.*,
|
|
b.business_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 = '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
|
|
LEFT JOIN wr_business b ON p.business_id = b.business_id
|
|
`
|
|
|
|
const conditions: string[] = []
|
|
const params: any[] = []
|
|
let paramIndex = 1
|
|
|
|
if (status) {
|
|
conditions.push(`p.project_status = $${paramIndex++}`)
|
|
params.push(status)
|
|
}
|
|
|
|
if (businessId) {
|
|
conditions.push(`p.business_id = $${paramIndex++}`)
|
|
params.push(businessId)
|
|
}
|
|
|
|
if (conditions.length > 0) {
|
|
sql += ' WHERE ' + conditions.join(' AND ')
|
|
}
|
|
|
|
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,
|
|
businessId: p.business_id,
|
|
businessName: p.business_name,
|
|
pmName: p.pm_name,
|
|
plName: p.pl_name,
|
|
createdAt: p.created_at
|
|
}))
|
|
}
|
|
})
|