import { queryOne, execute } from '../../../utils/db' import { getClientIp } from '../../../utils/ip' import { getCurrentUserEmail } from '../../../utils/user' interface Attendee { employeeId?: number externalName?: string externalCompany?: string } interface UpdateMeetingBody { meetingTitle: string meetingType: 'PROJECT' | 'INTERNAL' projectId?: number meetingDate: string startTime?: string endTime?: string location?: string rawContent?: string attendees?: Attendee[] } /** * 회의록 수정 * PUT /api/meeting/[id]/update */ export default defineEventHandler(async (event) => { const meetingId = Number(getRouterParam(event, 'id')) const body = await readBody(event) const clientIp = getClientIp(event) const userEmail = await getCurrentUserEmail(event) if (!meetingId) { throw createError({ statusCode: 400, message: '회의록 ID가 필요합니다.' }) } // 회의록 존재 확인 const existing = await queryOne(` SELECT meeting_id FROM wr_meeting WHERE meeting_id = $1 `, [meetingId]) if (!existing) { throw createError({ statusCode: 404, message: '회의록을 찾을 수 없습니다.' }) } // 필수값 검증 if (!body.meetingTitle) { throw createError({ statusCode: 400, message: '회의 제목은 필수입니다.' }) } if (body.meetingType === 'PROJECT' && !body.projectId) { throw createError({ statusCode: 400, message: '프로젝트 회의는 프로젝트 선택이 필수입니다.' }) } // 회의록 UPDATE await execute(` UPDATE wr_meeting SET meeting_title = $1, meeting_type = $2, project_id = $3, meeting_date = $4, start_time = $5, end_time = $6, location = $7, raw_content = $8, updated_at = NOW(), updated_ip = $9, updated_email = $10 WHERE meeting_id = $11 `, [ body.meetingTitle, body.meetingType, body.meetingType === 'PROJECT' ? body.projectId : null, body.meetingDate, body.startTime || null, body.endTime || null, body.location || null, body.rawContent || null, clientIp, userEmail, meetingId ]) // 참석자 갱신 (기존 삭제 후 새로 INSERT) await execute(`DELETE FROM wr_meeting_attendee WHERE meeting_id = $1`, [meetingId]) if (body.attendees && body.attendees.length > 0) { for (const att of body.attendees) { if (att.employeeId) { await execute(` INSERT INTO wr_meeting_attendee (meeting_id, employee_id) VALUES ($1, $2) `, [meetingId, att.employeeId]) } else if (att.externalName) { await execute(` INSERT INTO wr_meeting_attendee (meeting_id, external_name, external_company) VALUES ($1, $2, $3) `, [meetingId, att.externalName, att.externalCompany || null]) } } } return { success: true, meetingId, message: '회의록이 수정되었습니다.' } })