- logs/, *.log 패턴 추가
- 기존 추적되던 로그 파일 제거
- 향후 merge 충돌 방지
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Azure Event Hubs 의존성이 필요한 InMemoryCheckpointStore.java 파일 삭제
- 해당 클래스는 프로젝트에서 사용되지 않음
- GitHub Actions 빌드 에러 해결
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
회의 종료 API 및 AI 회의록 통합 기능을 main 브랜치에 병합
주요 기능:
- 회의 종료 시 AI 자동 요약 생성
- 안건별 논의사항/결정사항 자동 정리
- 주요 키워드 추출
- Todo 및 보류사항 자동 식별
충돌 해결:
- MinutesSectionEntity: id 필드명으로 통일
- AgendaSection 관련 파일들: feat/meeting-ai 버전 사용
- application.yml: AI Service 포트 8086 설정 유지
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
- 회의 종료 API 구현 (POST /api/meetings/{meetingId}/end)
- AI 회의록 통합 요약 기능 구현
- Claude API 연동 및 프롬프트 최적화
- 안건별 요약, 키워드 추출, 결정사항 자동 정리
AI Service (Python):
- Claude 모델 설정: claude-sonnet-4-5-20250929
- 회의록 통합 프롬프트 개선
- AgendaSummary 모델 summary 필드 매핑 수정
- decisions 필드 추가 및 응답 구조 정리
- 입력 데이터 로깅 추가
Meeting Service (Java):
- EndMeetingService AI 통합 로직 구현
- MeetingAnalysis 엔티티 decisions 필드 추가
- AgendaSection opinions 필드 제거
- AI Service 포트 8086으로 설정
- DB 마이그레이션 스크립트 추가 (V7)
테스트 결과:
✅ 회의 종료 API 정상 동작
✅ AI 응답 검증 (keywords, summary, decisions)
✅ 안건별 요약 및 보류사항 추출
✅ 처리 시간: ~11초, 토큰: ~2,600
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- AgendaSection 도메인 및 Entity에서 opinions 필드 제거
- ParticipantOpinion 내부 클래스 삭제
- MeetingAiController 및 AgendaSectionResponse에서 opinions 관련 로직 제거
- agenda_sections 테이블 마이그레이션 SQL 스크립트 추가
* agenda_number: varchar(50) → integer 변환
* decisions, pending_items, todos: text → json 변환
* opinions 컬럼 삭제
- 자동 백업 및 롤백 기능 포함
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✅ 구현 완료
- 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>
## 구현 내용
- 참석자별 회의록 조회 API (GET /api/meetings/{meetingId}/ai/participant-minutes)
- 안건별 섹션 조회 API (GET /api/meetings/{meetingId}/ai/agenda-sections)
- 회의 통계 조회 API (GET /api/meetings/{meetingId}/ai/statistics)
## DB 스키마 변경
- V4 마이그레이션: agenda_sections 테이블에 todos JSON 컬럼 추가
- AI가 추출한 Todo를 안건별로 저장하는 구조
## 주요 특징
- AI Service가 한 번에 요약 + Todo 추출
- 프로토타입 기반 요구사항 반영 (불필요한 통계 제거)
- Todo 수를 agenda_sections의 todos 컬럼에서 집계
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## 변경 내용
- 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로 구분 가능)
- 중복 정보 제거로 데이터 일관성 향상