@startuml 회의록상세조회및수정 !theme mono title 회의록상세조회및수정 외부 시퀀스 actor "사용자" as User participant "Web App" as Frontend participant "API Gateway" as Gateway participant "Meeting Service" as Meeting participant "AI Service" as AI database "Redis Cache" as Cache database "Meeting DB" as MeetingDB participant "WebSocket" as WS == 회의록 상세 조회 == User -> Frontend: 회의록 클릭 activate Frontend Frontend -> Gateway: GET /api/minutes/{minutesId} activate Gateway Gateway -> Meeting: GET /minutes/{minutesId} activate Meeting ' 캐시 조회 (회의록 기본 정보) Meeting --> Cache: GET minutes:{minutesId} activate Cache Cache --> Meeting: 캐시 조회 결과 deactivate Cache alt Cache Hit Meeting -> Meeting: 캐시 데이터 사용 else Cache Miss Meeting -> MeetingDB: 회의록 상세 조회\n- 회의 기본 정보\n- 섹션별 상세 내용\n- 참석자 목록\n- Todo 목록\n- 검증 상태 activate MeetingDB MeetingDB --> Meeting: 회의록 데이터 deactivate MeetingDB Meeting --> Cache: SET minutes:{minutesId}\n(TTL: 10분) activate Cache Cache --> Meeting: 캐시 저장 완료 deactivate Cache end ' 관련 회의록 검색 (비동기, 선택적) Meeting -> AI: POST /ai/related-minutes\n{\n "minutesId": "{minutesId}",\n "threshold": 0.7\n} activate AI AI -> AI: 벡터 유사도 검색\n- 회의 주제 임베딩\n- 과거 회의록 비교\n- 유사도 70%+ 필터링 AI --> Meeting: 관련 회의록 목록\n(최대 3개, 관련도순) deactivate AI Meeting --> Gateway: 회의록 상세 데이터 응답\n{\n "minutesId": "...",\n "title": "...",\n "meetingInfo": {...},\n "sections": [...],\n "relatedMinutes": [...],\n "participants": [...],\n "todos": [...],\n "verificationStatus": {...}\n} deactivate Meeting Gateway --> Frontend: 200 OK\n회의록 상세 데이터 deactivate Gateway Frontend -> Frontend: 회의록 상세 화면 렌더링\n- 회의 기본 정보 표시\n- 섹션별 내용 표시\n- 관련 회의록 표시\n- Todo 목록 표시\n- 수정 권한 확인 Frontend --> User: 회의록 상세 화면 표시 deactivate Frontend == 회의록 수정 == User -> Frontend: 수정 버튼 클릭 activate Frontend Frontend -> Frontend: 수정 화면으로 전환\n- 마크다운 에디터 활성화\n- WebSocket 연결 준비 ' WebSocket 연결 (실시간 동기화) Frontend -> WS: WebSocket 연결\n(회의록 ID, 사용자 정보) activate WS WS --> Frontend: 연결 완료 deactivate WS Frontend --> User: 수정 가능 상태 deactivate Frontend User -> Frontend: 내용 수정 입력 activate Frontend Frontend -> Frontend: 자동 저장 타이머 시작\n(30초 간격) note over Frontend 사용자가 계속 수정 중... 30초마다 자동 저장 end note Frontend -> Gateway: PUT /api/minutes/{minutesId}\n{\n "sections": [...],\n "modifiedBy": "userId",\n "timestamp": "...",\n "delta": {...}\n} activate Gateway Gateway -> Meeting: PUT /minutes/{minutesId} activate Meeting Meeting -> Meeting: 수정 권한 검증\n- 작성자 확인\n- 잠금 섹션 확인 alt 권한 없음 Meeting --> Gateway: 403 Forbidden Gateway --> Frontend: 수정 권한 없음 Frontend --> User: 오류 메시지 표시 else 권한 있음 Meeting -> MeetingDB: 회의록 수정\n- 수정 내용 저장\n- 버전 관리 (이전 버전 보관)\n- 수정 이력 기록\n- 상태 변경 (확정완료 → 작성중) activate MeetingDB MeetingDB --> Meeting: 수정 완료 deactivate MeetingDB ' 캐시 무효화 Meeting --> Cache: DEL minutes:{minutesId} activate Cache Cache --> Meeting: 캐시 삭제 완료 deactivate Cache ' 실시간 동기화 (WebSocket) Meeting -> WS: 수정 델타 전송\n{\n "minutesId": "...",\n "modifiedBy": "...",\n "delta": {...},\n "timestamp": "..."\n} activate WS WS -> Frontend: 실시간 수정 반영\n(다른 참석자들에게) deactivate WS Meeting --> Gateway: 수정 완료 응답\n{\n "version": "...",\n "modifiedAt": "...",\n "status": "작성중"\n} deactivate Meeting Gateway --> Frontend: 200 OK\n수정 완료 deactivate Gateway Frontend -> Frontend: 수정 상태 업데이트\n- "저장됨" 표시\n- 수정 시간 갱신 Frontend --> User: 수정 반영 완료 end deactivate Frontend @enduml