mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 16:06:23 +00:00
- 외부 시퀀스 다이어그램 업데이트 * 회의예약: 템플릿 선택 플로우 추가, API 경로 수정 (/api/meetings/reserve) * 회의시작: SessionResponse 구조 반영 (sessionId, minutesId, websocketUrl 등) * 회의종료: AI 분석 동기 처리 및 MeetingEndResponse 구조 반영, RAG용 이벤트 추가 - 불필요한 다이어그램 삭제 * 외부: 대시보드조회.puml (Meeting Service로 이동), Todo완료및회의록반영.puml (통합됨) * 내부: meeting-대시보드조회.puml, meeting-최종회의록확정.puml (중복) - 실제 API Controller 구현과 일치하도록 API 경로 및 응답 구조 정확히 반영 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
145 lines
4.8 KiB
Plaintext
145 lines
4.8 KiB
Plaintext
@startuml
|
|
!theme mono
|
|
|
|
title 외부 시퀀스 - 회의 종료 및 최종 확정
|
|
|
|
actor "사용자" as User
|
|
participant "Web App" as WebApp
|
|
participant "API Gateway" as Gateway
|
|
participant "Meeting Service" as Meeting
|
|
participant "STT Service" as STT
|
|
participant "AI Service" as AI
|
|
participant "Notification Service" as Notification
|
|
participant "Azure Event Hubs" as EventHub
|
|
|
|
note over Gateway
|
|
라우팅 규칙:
|
|
/api/meetings/** → Meeting Service
|
|
/api/minutes/** → Meeting Service
|
|
/api/dashboard → User Service
|
|
/api/notifications/** → Notification Service
|
|
/api/auth/** → User Service
|
|
/api/todos/** → Meeting Service
|
|
end note
|
|
|
|
== 회의 종료 ==
|
|
User -> WebApp: 회의 종료 버튼 클릭
|
|
WebApp -> Gateway: POST /meetings/{meetingId}/end
|
|
note right
|
|
요청 헤더에 JWT 토큰 포함
|
|
요청 바디에 사용자 정보 포함
|
|
(userId, userName, email)
|
|
end note
|
|
|
|
Gateway -> Meeting: 회의 종료 요청
|
|
Meeting -> Meeting: 회의 종료 처리\n- 종료 시간 기록\n- 회의록 생성 (DRAFT 상태)\n- 회의 통계 생성\n (총 시간, 참석자 수 등)
|
|
|
|
Meeting -> AI: AI 분석 요청\n- 키워드 추출\n- 안건별 요약 생성\n- Todo 항목 추출
|
|
activate AI
|
|
AI -> AI: AI 분석 수행
|
|
AI --> Meeting: AI 분석 결과\n(keywords, agendaSummaries, todos)
|
|
deactivate AI
|
|
|
|
Meeting -> Meeting: DB 저장\n- Meeting 종료 상태\n- Minutes 생성 (DRAFT)\n- AgendaSection 저장\n- Todo 저장
|
|
Meeting -> Meeting: Redis 캐시 무효화\n(meeting:info:{meetingId})
|
|
|
|
Meeting -> EventHub: MeetingEnded 이벤트 발행\n(meetingId, userId, endTime)
|
|
note right
|
|
Partition Key: {meetingId}
|
|
Consumer Group:
|
|
- stt-service-group
|
|
end note
|
|
|
|
Meeting -> EventHub: NotificationRequest 이벤트 발행\n(회의 종료 알림)
|
|
activate EventHub
|
|
note right
|
|
이벤트 데이터:
|
|
- 발송수단: EMAIL
|
|
- 대상자: 참석자 전원
|
|
- 메시지: 회의 종료 안내
|
|
- 메타데이터: 회의 통계, 회의록 링크
|
|
end note
|
|
EventHub --> Meeting: 발행 완료
|
|
deactivate EventHub
|
|
|
|
Meeting -> Gateway: 200 OK\n- minutesId\n- 회의 통계 (참석자 수, 시간, 안건 수, Todo 수)\n- 키워드 목록\n- 안건별 AI 요약 (한줄 요약, 상세 요약)\n- Todo 목록
|
|
Gateway -> WebApp: 회의 종료 완료 응답\n(MeetingEndResponse)
|
|
WebApp -> User: 회의 종료 화면 표시\n- 통계 카드\n- 키워드 태그\n- 안건 아코디언 (AI 요약 + Todo)
|
|
|
|
== 비동기 처리 - STT 종료 ==
|
|
EventHub --> STT: MeetingEnded 이벤트 수신
|
|
STT -> STT: 음성 녹음 중지
|
|
STT -> STT: 최종 STT 변환 완료 확인
|
|
|
|
== 비동기 처리 - 회의 종료 알림 ==
|
|
EventHub --> Notification: NotificationRequest 이벤트 수신
|
|
Notification -> Notification: 회의 종료 알림 발송\n(참석자 전원)
|
|
note right
|
|
알림 내용:
|
|
- 회의 제목
|
|
- 회의 종료 시간
|
|
- 회의 통계
|
|
- 회의록 링크
|
|
end note
|
|
|
|
== 최종 회의록 확정 ==
|
|
User -> WebApp: 최종 회의록 확정 버튼 클릭\n(회의록 수정 화면 또는 회의 종료 화면)
|
|
WebApp -> Gateway: POST /api/meetings/minutes/{minutesId}/finalize
|
|
note right
|
|
요청 헤더에 JWT 토큰 포함
|
|
X-User-Id, X-User-Name, X-User-Email
|
|
end note
|
|
|
|
Gateway -> Meeting: 회의록 확정 요청
|
|
Meeting -> Meeting: 회의록 상태 변경\n- DRAFT → FINALIZED\n- finalizedAt 기록\n- finalizedBy 기록
|
|
|
|
Meeting -> Meeting: DB 저장\n- Minutes 상태 업데이트
|
|
Meeting -> Meeting: Redis 캐시 저장\n(확정된 회의록, TTL: 10분)
|
|
Meeting -> Meeting: Redis 목록 캐시 무효화\n(사용자별 회의록 목록)
|
|
|
|
Meeting -> EventHub: MinutesFinalizedEvent 발행\n(알림용 - 기존)
|
|
activate EventHub
|
|
note right
|
|
간단한 이벤트 데이터:
|
|
- minutesId
|
|
- title
|
|
- userId
|
|
- userName
|
|
end note
|
|
EventHub --> Meeting: 발행 완료
|
|
deactivate EventHub
|
|
|
|
Meeting -> EventHub: MinutesFinalizedEvent 발행\n(RAG용 - 완전한 데이터)
|
|
activate EventHub
|
|
note right
|
|
완전한 이벤트 데이터:
|
|
- Meeting 정보 (meetingId, title, purpose, scheduledAt 등)
|
|
- Minutes 정보 (minutesId, status, version 등)
|
|
- Sections 정보 (모든 안건 섹션)
|
|
- 참석자 정보
|
|
end note
|
|
EventHub --> Meeting: 발행 완료
|
|
deactivate EventHub
|
|
|
|
Meeting -> Gateway: 200 OK\n(확정된 회의록 상세 정보)
|
|
Gateway -> WebApp: 회의록 확정 완료
|
|
WebApp -> User: 확정 완료 토스트 표시\n회의록 상세 조회 화면으로 이동
|
|
|
|
== 비동기 처리 - 알림 발송 ==
|
|
EventHub --> Notification: MinutesFinalizedEvent 수신\n(알림용)
|
|
Notification -> Notification: 회의록 확정 알림 발송\n(참석자 전원)
|
|
note right
|
|
알림 내용:
|
|
- 회의 제목
|
|
- 확정 시간
|
|
- 회의록 링크
|
|
end note
|
|
|
|
== 비동기 처리 - RAG 저장 ==
|
|
EventHub --> AI: MinutesFinalizedEvent 수신\n(RAG용)
|
|
activate AI
|
|
AI -> AI: RAG 서비스 연동\n- 벡터 DB 저장\n- 관련 회의록 검색 준비
|
|
deactivate AI
|
|
|
|
@enduml
|