hgzero/design/backend/sequence/outer/회의종료및최종확정.puml

119 lines
3.9 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- 회의 통계 생성\n (총 시간, 참석자 수, 발언 횟수 등)
Meeting -> Meeting: DB 저장
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: 202 Accepted\n(회의 종료 완료)
Gateway -> WebApp: 회의 종료 완료 응답
WebApp -> User: 회의 통계 표시\n(총 시간, 참석자, 발언 횟수 등)
== 비동기 처리 - STT 종료 ==
EventHub --> STT: MeetingEnded 이벤트 수신
STT -> STT: 음성 녹음 중지
STT -> STT: 최종 STT 변환 완료 확인
== 비동기 처리 - 회의 종료 알림 ==
EventHub --> Notification: NotificationRequest 이벤트 수신
Notification -> Notification: 회의 종료 알림 발송\n(참석자 전원)
note right
알림 내용:
- 회의 제목
- 회의 종료 시간
- 회의 통계
- 회의록 링크
end note
== 최종 회의록 확정 ==
User -> WebApp: 최종 회의록 확정 버튼 클릭
WebApp -> Gateway: POST /api/minutes/{minutesId}/finalize
note right
요청 헤더에 JWT 토큰 포함
요청 바디에 사용자 정보 포함
end note
Gateway -> Meeting: 회의록 확정 요청
Meeting -> Meeting: 필수 항목 검사\n- 회의 제목\n- 참석자 목록\n- 주요 논의 내용\n- 결정 사항
alt 필수 항목 미작성
Meeting -> Gateway: 400 Bad Request\n(누락된 항목 정보)
Gateway -> WebApp: 검증 실패 응답
WebApp -> User: 누락된 항목 안내\n(해당 섹션으로 자동 이동)
else 필수 항목 작성 완료
Meeting -> Meeting: 회의록 최종 확정\n- 확정 버전 생성\n- 확정 시간 기록\n- 공유 가능 상태로 전환
Meeting -> Meeting: DB 저장 (MinutesVersion)
Meeting -> Meeting: Redis 캐시 무효화
Meeting -> EventHub: NotificationRequest 이벤트 발행\n(회의록 확정 알림)
activate EventHub
note right
이벤트 데이터:
- 발송수단: EMAIL
- 대상자: 참석자 전원
- 메시지: 회의록 확정 안내
- 메타데이터: 버전 번호, 확정 시간
end note
EventHub --> Meeting: 발행 완료
deactivate EventHub
Meeting -> Gateway: 200 OK\n(확정 버전 정보)
Gateway -> WebApp: 회의록 확정 완료
WebApp -> User: 확정 완료 안내\n(버전 번호, 확정 시간)
EventHub --> Notification: NotificationRequest 이벤트 수신
Notification -> Notification: 회의록 확정 알림 발송\n(참석자 전원)
end
@enduml