56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { query } from '../../../utils/db'
|
|
|
|
/**
|
|
* 주간보고 목록 조회
|
|
* GET /api/report/weekly/list
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const userId = getCookie(event, 'user_id')
|
|
if (!userId) {
|
|
throw createError({ statusCode: 401, message: '로그인이 필요합니다.' })
|
|
}
|
|
|
|
const queryParams = getQuery(event)
|
|
const limit = parseInt(queryParams.limit as string) || 20
|
|
|
|
const reports = await query<any>(`
|
|
SELECT
|
|
r.report_id,
|
|
r.author_id,
|
|
e.employee_name as author_name,
|
|
r.report_year,
|
|
r.report_week,
|
|
r.week_start_date,
|
|
r.week_end_date,
|
|
r.issue_description,
|
|
r.vacation_description,
|
|
r.report_status,
|
|
r.submitted_at,
|
|
r.created_at,
|
|
(SELECT COUNT(*) FROM wr_weekly_report_project WHERE report_id = r.report_id) as project_count
|
|
FROM wr_weekly_report r
|
|
JOIN wr_employee_info e ON r.author_id = e.employee_id
|
|
WHERE r.author_id = $1
|
|
ORDER BY r.report_year DESC, r.report_week DESC
|
|
LIMIT $2
|
|
`, [userId, limit])
|
|
|
|
return {
|
|
reports: reports.map((r: any) => ({
|
|
reportId: r.report_id,
|
|
authorId: r.author_id,
|
|
authorName: r.author_name,
|
|
reportYear: r.report_year,
|
|
reportWeek: r.report_week,
|
|
weekStartDate: r.week_start_date,
|
|
weekEndDate: r.week_end_date,
|
|
issueDescription: r.issue_description,
|
|
vacationDescription: r.vacation_description,
|
|
reportStatus: r.report_status,
|
|
submittedAt: r.submitted_at,
|
|
createdAt: r.created_at,
|
|
projectCount: parseInt(r.project_count)
|
|
}))
|
|
}
|
|
})
|