hgzero/design/backend/sequence/outer/회의예약및참석자초대.puml

91 lines
2.7 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\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
== 참석자 초대 알림 (비동기) ==
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