Minseo-Jo 143721d106 feat: Meeting Service AI 통합 개발
 구현 완료
- AI Python Service (FastAPI, Claude API, 8087 포트)
  - POST /api/v1/transcripts/consolidate
  - 참석자별 회의록 → AI 통합 분석
  - 키워드/안건별 요약/Todo 추출

- Meeting Service AI 통합
  - EndMeetingService (@Primary)
  - AIServiceClient (RestTemplate, 30초 timeout)
  - AI 분석 결과 저장 (meeting_analysis, todos)
  - 회의 상태 COMPLETED 처리

- DTO 구조 (간소화)
  - ConsolidateRequest/Response
  - MeetingEndDTO
  - Todo 제목만 포함 (담당자/마감일 제거)

📝 기술스택
- Python: FastAPI, anthropic 0.71.0, psycopg2
- Java: Spring Boot, RestTemplate
- Claude: claude-3-5-sonnet-20241022

🔧 주요 이슈 해결
- 포트 충돌: 8086(feature/stt-ai) → 8087(feat/meeting-ai)
- Bean 충돌: @Primary 추가
- YAML 문법: ai.service.url 구조 수정
- anthropic 라이브러리 업그레이드

📚 테스트 가이드 및 스크립트 작성
- claude/MEETING-AI-TEST-GUIDE.md
- test-meeting-ai.sh

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 16:42:09 +09:00
..
2025-10-27 13:31:58 +09:00

notification 메일 알림발송

아래와 같이 메일발송 Email List를 loop돌려서 event 객체를 생성한 후에 publishNotificationRequest 메소드를 통해 Event 메세지 발행하시면 됩니다.

        // 각 참석자에게 개별 알림 이벤트 발행
        for (String participantEmail : participants) {
            NotificationRequestEvent event = NotificationRequestEvent.builder()
                    .notificationType("MEETING_INVITATION")
                    .recipientEmail(participantEmail)
                    .recipientId(participantEmail)
                    .recipientName(participantEmail)
                    .title("회의 초대")
                    .message(String.format("'%s' 회의에 초대되었습니다. 일시: %s, 장소: %s",
                            title, startTime, location))
                    .relatedEntityId(meetingId)
                    .relatedEntityType("MEETING")
                    .requestedBy(organizerId)
                    .requestedByName(organizerName)
                    .eventTime(LocalDateTime.now())
                    .build();

            publishNotificationRequest(event);
        }