97 lines
2.7 KiB
TypeScript
97 lines
2.7 KiB
TypeScript
import { query, queryOne } from '../../../utils/db'
|
|
|
|
/**
|
|
* 회의록 상세 조회
|
|
* GET /api/meeting/[id]/detail
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const meetingId = Number(getRouterParam(event, 'id'))
|
|
|
|
if (!meetingId) {
|
|
throw createError({ statusCode: 400, message: '회의록 ID가 필요합니다.' })
|
|
}
|
|
|
|
// 회의록 기본 정보
|
|
const meeting = await queryOne(`
|
|
SELECT
|
|
m.*,
|
|
p.project_name,
|
|
e.employee_name as author_name,
|
|
e.employee_email as author_email
|
|
FROM wr_meeting m
|
|
LEFT JOIN wr_project_info p ON m.project_id = p.project_id
|
|
LEFT JOIN wr_employee_info e ON m.author_id = e.employee_id
|
|
WHERE m.meeting_id = $1
|
|
`, [meetingId])
|
|
|
|
if (!meeting) {
|
|
throw createError({ statusCode: 404, message: '회의록을 찾을 수 없습니다.' })
|
|
}
|
|
|
|
// 참석자 목록
|
|
const attendees = await query(`
|
|
SELECT
|
|
a.attendee_id,
|
|
a.employee_id,
|
|
e.employee_name,
|
|
e.employee_email,
|
|
e.company,
|
|
a.external_name,
|
|
a.external_company
|
|
FROM wr_meeting_attendee a
|
|
LEFT JOIN wr_employee_info e ON a.employee_id = e.employee_id
|
|
WHERE a.meeting_id = $1
|
|
ORDER BY a.attendee_id
|
|
`, [meetingId])
|
|
|
|
// 안건 목록 (AI 분석 결과)
|
|
const agendas = await query(`
|
|
SELECT *
|
|
FROM wr_meeting_agenda
|
|
WHERE meeting_id = $1
|
|
ORDER BY agenda_no
|
|
`, [meetingId])
|
|
|
|
return {
|
|
meeting: {
|
|
meetingId: meeting.meeting_id,
|
|
meetingTitle: meeting.meeting_title,
|
|
meetingType: meeting.meeting_type,
|
|
projectId: meeting.project_id,
|
|
projectName: meeting.project_name,
|
|
meetingDate: meeting.meeting_date,
|
|
startTime: meeting.start_time,
|
|
endTime: meeting.end_time,
|
|
location: meeting.location,
|
|
rawContent: meeting.raw_content,
|
|
aiSummary: meeting.ai_summary,
|
|
aiStatus: meeting.ai_status,
|
|
aiProcessedAt: meeting.ai_processed_at,
|
|
aiConfirmedAt: meeting.ai_confirmed_at,
|
|
authorId: meeting.author_id,
|
|
authorName: meeting.author_name,
|
|
authorEmail: meeting.author_email,
|
|
createdAt: meeting.created_at,
|
|
updatedAt: meeting.updated_at
|
|
},
|
|
attendees: attendees.map((a: any) => ({
|
|
attendeeId: a.attendee_id,
|
|
employeeId: a.employee_id,
|
|
employeeName: a.employee_name,
|
|
employeeEmail: a.employee_email,
|
|
company: a.company,
|
|
externalName: a.external_name,
|
|
externalCompany: a.external_company,
|
|
isExternal: !a.employee_id
|
|
})),
|
|
agendas: agendas.map((a: any) => ({
|
|
agendaId: a.agenda_id,
|
|
agendaNo: a.agenda_no,
|
|
agendaTitle: a.agenda_title,
|
|
agendaContent: a.agenda_content,
|
|
decisionStatus: a.decision_status,
|
|
decisionContent: a.decision_content
|
|
}))
|
|
}
|
|
})
|