hgzero/design/backend/sequence/outer/회의록상세조회및수정.puml
kimjh abb2f8c280 PlantUML 문법 오류 수정 (외부 시퀀스 설계)
- 7개 외부 시퀀스 설계서 PlantUML 문법 오류 수정 완료

**주요 수정 사항**:
1. 비동기 화살표 수정
   - `->>` → `->` (동기 메시지)
   - `-->>` → `-->` (응답 메시지)

2. 캐시 호출 화살표 수정
   - `-.->` → `-->` (응답 화살표)

3. note 블록 수정
   - 단일 라인 `note right:` → 블록 형태로 변경

4. activate/deactivate 최적화
   - 비동기 이벤트 처리에서 불필요한 activate/deactivate 제거

**수정된 파일**:
- Todo완료및회의록반영.puml
- 대시보드조회.puml
- 회의록공유.puml
- 회의록상세조회및수정.puml
- 회의시작및실시간회의록작성.puml
- 회의예약및참석자초대.puml
- 회의종료및최종확정.puml

**검증 결과**:
 모든 화살표가 PlantUML 표준 문법 준수 (`->`, `-->`)
 잘못된 화살표 문법 모두 제거 (`->>`, `-->>`, `-.->`)
 activate/deactivate 쌍 정상 매칭
 PlantUML 렌더링 오류 해결

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 15:09:18 +09:00

135 lines
4.3 KiB
Plaintext

@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