hgzero/design/backend/sequence/outer/회의예약및참석자초대.puml
yabo0812 ed9fa6f934 설계서 업데이트: 실제 구현 반영 및 불필요한 다이어그램 정리
- 외부 시퀀스 다이어그램 업데이트
  * 회의예약: 템플릿 선택 플로우 추가, 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>
2025-10-29 18:20:15 +09:00

115 lines
3.3 KiB
Plaintext

@startuml 회의예약및참석자초대
!theme mono
title 회의 예약 및 참석자 초대 플로우
actor "사용자" as User
participant "Web App" as WebApp
participant "API Gateway" as Gateway
participant "Meeting Service" as Meeting
database "Meeting DB" as MeetingDB
database "Redis Cache" as Redis
participant "Azure Event Hubs" as EventHub
participant "Notification Service" as Notification
participant "Email Service" as Email
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: 회의 정보 입력\n(제목, 날짜/시간, 장소, 참석자)
activate WebApp
WebApp -> Gateway: POST /api/meetings/reserve\n+ JWT 토큰\n+ 사용자 정보 (userId, userName, email)
activate Gateway
Gateway -> Meeting: 회의 생성 요청
activate Meeting
Meeting -> MeetingDB: 회의 정보 저장\n(제목, 일시, 장소, 참석자, 생성자)
activate MeetingDB
MeetingDB --> Meeting: 회의 ID 반환
deactivate MeetingDB
Meeting -> Redis: 회의 정보 캐싱\nkey: meeting:info:{meetingId}\nTTL: 10분
activate Redis
Redis --> Meeting: 캐싱 완료
deactivate Redis
Meeting -> Redis: 참석자 목록 캐싱\nkey: meeting:participants:{meetingId}\nTTL: 10분
activate Redis
Redis --> Meeting: 캐싱 완료
deactivate Redis
Meeting -> EventHub: NotificationRequest 이벤트 발행
activate EventHub
note right
이벤트 데이터:
- 발송수단: EMAIL
- 대상자: 참석자 목록
- 메시지: 회의 초대 내용
- 메타데이터: 회의 제목, 일시, 장소
end note
EventHub --> Meeting: 발행 완료
deactivate EventHub
Meeting --> Gateway: 201 Created\n회의 ID, 회의 정보
deactivate Meeting
Gateway --> WebApp: 회의 생성 응답
deactivate Gateway
WebApp --> User: 회의 예약 완료 표시\n캘린더에 자동 등록
deactivate WebApp
== 템플릿 선택 (선택 사항) ==
User -> WebApp: 템플릿 선택\n(일반, 스크럼, 킥오프, 주간)
activate WebApp
WebApp -> Gateway: PUT /api/meetings/{meetingId}/template\n+ JWT 토큰\n+ templateId
activate Gateway
Gateway -> Meeting: 템플릿 적용 요청
activate Meeting
Meeting -> MeetingDB: 템플릿 정보 저장
activate MeetingDB
MeetingDB --> Meeting: 저장 완료
deactivate MeetingDB
Meeting --> Gateway: 200 OK\n템플릿 적용 완료
deactivate Meeting
Gateway --> WebApp: 템플릿 적용 응답
deactivate Gateway
WebApp --> User: 템플릿 적용 완료
deactivate WebApp
== 참석자 초대 알림 (비동기) ==
EventHub -> Notification: NotificationRequest 이벤트 수신\n(Consumer Group: notification-service-group)
Notification -> Email: 참석자 전원에게 초대 이메일 발송\n(회의 제목, 일시, 장소, 참여 링크)
Email --> Notification: 발송 완료
Notification -> MeetingDB: 알림 발송 기록 저장
MeetingDB --> Notification: 저장 완료
== 회의 시작 30분 전 리마인더 (스케줄링) ==
note over Notification
스케줄링된 작업:
회의 시작 시간 30분 전 자동 실행
end note
Notification -> Email: 참석자 전원에게 리마인더 이메일 발송\n(회의 시작 30분 전)
Email --> Notification: 발송 완료
@enduml