Minseo-Jo 92e4863fc7 feat: 회의종료 기능을 위한 DB 스키마 추가
## 변경 내용
- minutes 테이블에 user_id 컬럼 추가 (참석자별 회의록 지원)
  * user_id IS NULL: AI 통합 회의록
  * user_id IS NOT NULL: 참석자별 회의록

- agenda_sections 테이블 생성 (안건별 AI 요약 저장)
  * agenda_number, agenda_title
  * ai_summary_short, discussions, decisions (JSON)
  * pending_items (JSON), opinions (JSON)

- ai_summaries 테이블 생성 (AI 결과 캐싱)
  * summary_type: CONSOLIDATED, TODO_EXTRACTION
  * keywords, statistics (JSON)
  * processing_time_ms (성능 모니터링)

- todos 테이블 확장 (AI 추출 정보)
  * extracted_by: AI, MANUAL
  * section_reference: 관련 안건 참조
  * extraction_confidence: 0.00~1.00

## 문서
- DB-Schema-회의종료.md: 상세 스키마 문서
- ERD-회의종료.puml: ERD 다이어그램
- 회의종료-개발계획.md: 전체 개발 계획

## 설계 개선
- is_consolidated 컬럼 제거 (user_id로 구분 가능)
- 중복 정보 제거로 데이터 일관성 향상
2025-10-28 11:21:32 +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);
        }