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

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)
}))
}
})