@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 == 회의록 공유 설정 == User -> Web: 공유 버튼 클릭 activate Web Web -> Web: 공유 대상 및 권한 설정 입력\n(읽기 전용/댓글 가능/편집 가능) Web -> Gateway: POST /api/meetings/{meetingId}/share\n(공유 설정 정보) activate Gateway Gateway -> Gateway: JWT 토큰 검증 Gateway -> Meeting: 회의록 공유 요청 activate Meeting == 공유 링크 생성 == Meeting -> Meeting: 공유 링크 생성\n(고유 URL, 권한, 유효기간) Meeting -> Meeting: 공유 정보 DB 저장\n(공유 시간, 대상, 권한) == Redis 캐시 무효화 == Meeting -> Redis: 회의 정보 캐시 무효화\n(meeting:info:{meetingId}) activate Redis Redis --> Meeting: 캐시 삭제 완료 deactivate Redis == 이벤트 발행 == Meeting -> EventHub: TranscriptShared 이벤트 발행\n(meetingId, 참석자 목록, 공유 URL) activate EventHub EventHub --> Meeting: 이벤트 발행 성공 deactivate EventHub Meeting --> Gateway: 공유 링크 생성 성공\n(공유 URL) deactivate Meeting Gateway --> Web: 공유 링크 반환 deactivate Gateway Web --> User: 공유 링크 표시 deactivate Web == 알림 발송 == EventHub -> Notification: TranscriptShared 이벤트 구독 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