feat: 업무협의록 AI 요약 기능 구현

- MeetingLogService에 summaryType 파라미터 추가
- buildWorkMemoPrompt 메서드 추가 (고객 요구사항/합의사항/To-Do 특화)
- MeetingLogController uploadFile에 summary_type 검증 추가
- work-memo-summary.blade.php 전체 UI 구현 (cyan 테마)
This commit is contained in:
2025-12-16 23:34:08 +09:00
parent e91789ff3d
commit e00ab53c7a
3 changed files with 488 additions and 55 deletions

View File

@@ -216,22 +216,27 @@ public function summary(int $id): View|JsonResponse
}
/**
* 오디오 파일 업로드 및 처리 (회의록 AI 요약)
* 오디오 파일 업로드 및 처리 (회의록/업무협의록 AI 요약)
*/
public function uploadFile(Request $request): JsonResponse
{
$validated = $request->validate([
'audio_file' => 'required|file|mimes:webm,wav,mp3,ogg,m4a,mp4|max:102400',
'title' => 'nullable|string|max:200',
'summary_type' => 'nullable|string|in:meeting,work-memo',
]);
$summaryType = $validated['summary_type'] ?? 'meeting';
$defaultTitle = $summaryType === 'work-memo' ? '업로드된 업무협의록' : '업로드된 회의록';
$meeting = $this->meetingLogService->create([
'title' => $validated['title'] ?? '업로드된 회의록',
'title' => $validated['title'] ?? $defaultTitle,
]);
$result = $this->meetingLogService->processUploadedFile(
$meeting,
$request->file('audio_file')
$request->file('audio_file'),
$summaryType
);
if (! $result['ok']) {
@@ -241,9 +246,11 @@ public function uploadFile(Request $request): JsonResponse
], 500);
}
$message = $summaryType === 'work-memo' ? '업무협의록이 생성되었습니다.' : '회의록이 생성되었습니다.';
return response()->json([
'success' => true,
'message' => '회의록이 생성되었습니다.',
'message' => $message,
'data' => $result['meeting'],
]);
}