기능구현중
This commit is contained in:
82
backend/api/meeting/[id]/confirm.post.ts
Normal file
82
backend/api/meeting/[id]/confirm.post.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import { queryOne, execute, insertReturning } from '../../../utils/db'
|
||||
import { requireAuth } from '../../../utils/session'
|
||||
import { getClientIp } from '../../../utils/ip'
|
||||
|
||||
interface ConfirmBody {
|
||||
selectedTodos?: Array<{
|
||||
agendaNo: number
|
||||
todoIndex: number
|
||||
title: string
|
||||
assignee?: string
|
||||
}>
|
||||
}
|
||||
|
||||
/**
|
||||
* AI 분석 결과 확정 + TODO 생성
|
||||
* POST /api/meeting/[id]/confirm
|
||||
*/
|
||||
export default defineEventHandler(async (event) => {
|
||||
const employeeId = await requireAuth(event)
|
||||
const meetingId = parseInt(event.context.params?.id || '0')
|
||||
const body = await readBody<ConfirmBody>(event)
|
||||
const ip = getClientIp(event)
|
||||
|
||||
if (!meetingId) {
|
||||
throw createError({ statusCode: 400, message: '회의록 ID가 필요합니다.' })
|
||||
}
|
||||
|
||||
// 회의록 조회
|
||||
const meeting = await queryOne<any>(`
|
||||
SELECT meeting_id, ai_summary, ai_status, project_id
|
||||
FROM wr_meeting WHERE meeting_id = $1
|
||||
`, [meetingId])
|
||||
|
||||
if (!meeting) {
|
||||
throw createError({ statusCode: 404, message: '회의록을 찾을 수 없습니다.' })
|
||||
}
|
||||
|
||||
if (!meeting.ai_summary) {
|
||||
throw createError({ statusCode: 400, message: 'AI 분석 결과가 없습니다.' })
|
||||
}
|
||||
|
||||
const aiResult = typeof meeting.ai_summary === 'string'
|
||||
? JSON.parse(meeting.ai_summary)
|
||||
: meeting.ai_summary
|
||||
|
||||
// 선택된 TODO 생성
|
||||
const createdTodos: any[] = []
|
||||
|
||||
if (body.selectedTodos && body.selectedTodos.length > 0) {
|
||||
for (const todo of body.selectedTodos) {
|
||||
const inserted = await insertReturning(`
|
||||
INSERT INTO wr_todo (
|
||||
source_type, meeting_id, project_id,
|
||||
todo_title, todo_description, todo_status,
|
||||
author_id, created_at, created_ip
|
||||
) VALUES ('MEETING', $1, $2, $3, $4, 'PENDING', $5, NOW(), $6)
|
||||
RETURNING todo_id
|
||||
`, [
|
||||
meetingId,
|
||||
meeting.project_id,
|
||||
todo.title,
|
||||
`안건 ${todo.agendaNo}에서 추출`,
|
||||
employeeId,
|
||||
ip
|
||||
])
|
||||
createdTodos.push({ todoId: inserted.todo_id, title: todo.title })
|
||||
}
|
||||
}
|
||||
|
||||
// 상태 업데이트
|
||||
await execute(`
|
||||
UPDATE wr_meeting
|
||||
SET ai_status = 'CONFIRMED', ai_confirmed_at = NOW()
|
||||
WHERE meeting_id = $1
|
||||
`, [meetingId])
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: `확정 완료. ${createdTodos.length}개의 TODO가 생성되었습니다.`,
|
||||
createdTodos
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user