@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