72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { query, queryOne } from '../../../utils/db'
|
|
|
|
/**
|
|
* 사업 상세 조회
|
|
* GET /api/business/[id]/detail
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const businessId = Number(getRouterParam(event, 'id'))
|
|
|
|
if (!businessId) {
|
|
throw createError({ statusCode: 400, message: '사업 ID가 필요합니다.' })
|
|
}
|
|
|
|
const business = await queryOne(`
|
|
SELECT
|
|
b.*,
|
|
e1.employee_name as created_by_name,
|
|
e2.employee_name as updated_by_name
|
|
FROM wr_business b
|
|
LEFT JOIN wr_employee_info e1 ON b.created_by = e1.employee_id
|
|
LEFT JOIN wr_employee_info e2 ON b.updated_by = e2.employee_id
|
|
WHERE b.business_id = $1
|
|
`, [businessId])
|
|
|
|
if (!business) {
|
|
throw createError({ statusCode: 404, message: '사업을 찾을 수 없습니다.' })
|
|
}
|
|
|
|
// 소속 프로젝트 목록
|
|
const projects = await query(`
|
|
SELECT
|
|
p.project_id,
|
|
p.project_name,
|
|
p.project_code,
|
|
p.project_type,
|
|
p.project_status,
|
|
p.start_date,
|
|
p.end_date
|
|
FROM wr_project_info p
|
|
WHERE p.business_id = $1
|
|
ORDER BY p.project_name
|
|
`, [businessId])
|
|
|
|
return {
|
|
business: {
|
|
businessId: business.business_id,
|
|
businessName: business.business_name,
|
|
businessCode: business.business_code,
|
|
clientName: business.client_name,
|
|
contractStartDate: business.contract_start_date,
|
|
contractEndDate: business.contract_end_date,
|
|
businessStatus: business.business_status,
|
|
description: business.description,
|
|
createdBy: business.created_by,
|
|
createdByName: business.created_by_name,
|
|
updatedBy: business.updated_by,
|
|
updatedByName: business.updated_by_name,
|
|
createdAt: business.created_at,
|
|
updatedAt: business.updated_at
|
|
},
|
|
projects: projects.map((p: any) => ({
|
|
projectId: p.project_id,
|
|
projectName: p.project_name,
|
|
projectCode: p.project_code,
|
|
projectType: p.project_type,
|
|
projectStatus: p.project_status,
|
|
startDate: p.start_date,
|
|
endDate: p.end_date
|
|
}))
|
|
}
|
|
})
|