@startuml !theme mono title 회의록공유 플로우 (UFR-MEET-060) actor "회의록 작성자" as User participant "Web App" as Web participant "API Gateway" as Gateway participant "Meeting Service" as Meeting participant "Redis Cache" as Redis participant "Azure Event Hubs" as EventHub participant "Notification Service" as Notification 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 -> Web: 공유 버튼 클릭 activate Web Web -> Web: 공유 대상 및 권한 설정 입력\n(읽기 전용/댓글 가능/편집 가능) Web -> Gateway: POST /api/minutes/{minutesId}/share\n(공유 설정 정보) activate Gateway Gateway -> Gateway: JWT 토큰 검증 Gateway -> Meeting: 회의록 공유 요청 activate Meeting == 공유 링크 생성 == Meeting -> Meeting: 공유 링크 생성\n(고유 URL, 권한, 유효기간) Meeting -> Meeting: 공유 정보 DB 저장\n(공유 시간, 대상, 권한) == Redis 캐시 무효화 == Meeting -> Redis: 회의록 정보 캐시 무효화\n(minutes:info:{minutesId}) activate Redis Redis --> Meeting: 캐시 삭제 완료 deactivate Redis == 이벤트 발행 == Meeting -> EventHub: NotificationRequest 이벤트 발행\n(회의록 공유 알림) activate EventHub note right 이벤트 데이터: - 발송수단: EMAIL - 대상자: 참석자 전원 - 메시지: 회의록 공유 안내 - 메타데이터: 공유 URL, 권한 정보 end note EventHub --> Meeting: 이벤트 발행 성공 deactivate EventHub Meeting --> Gateway: 공유 링크 생성 성공\n(공유 URL) deactivate Meeting Gateway --> Web: 공유 링크 반환 deactivate Gateway Web --> User: 공유 링크 표시 deactivate Web == 알림 발송 == EventHub -> Notification: NotificationRequest 이벤트 구독 activate Notification Notification -> Notification: 이메일 템플릿 생성\n(회의 제목, 공유 URL, 권한 정보) Notification -> Notification: 참석자 전원에게\n이메일 발송 Notification --> EventHub: 알림 발송 완료 deactivate Notification == 다음 회의 일정 자동 등록 (옵션) == note over Meeting 다음 회의 일정이 회의록에 언급된 경우에만 수행 end note Meeting -> Meeting: 회의록 내용 분석\n(다음 회의 일정 추출) Meeting -> Meeting: 캘린더 자동 등록\n(회의 제목, 날짜, 참석자) @enduml