@startuml 회의록조회및수정 !theme mono title 플로우 6: 회의록 조회 및 수정 actor "Frontend" as FE participant "API Gateway" as GW participant "Meeting Service" as MS participant "Collaboration Service" as CS participant "Redis" as RD database "Meeting DB" as MDB == 회의록 목록 조회 == FE -> GW: 회의록 목록 조회 요청\n(필터/정렬/검색 조건) activate GW GW -> MS: 목록 조회 요청 activate MS MS -> RD: 캐시 조회 (Cache-Aside)\nKey: meeting:list:{userId}:{filter} activate RD alt Cache Hit RD --> MS: 캐시 데이터 반환 MS --> GW: 목록 데이터 반환 GW --> FE: 목록 표시 else Cache Miss RD --> MS: 캐시 없음 deactivate RD MS -> MDB: DB 조회\n(필터, 정렬, 검색 조건 적용) activate MDB MDB --> MS: 목록 데이터 deactivate MDB MS -> RD: 캐시 저장 (TTL 10분)\nKey: meeting:list:{userId}:{filter} activate RD RD --> MS: 저장 완료 deactivate RD MS --> GW: 목록 데이터 반환 GW --> FE: 목록 표시 end deactivate MS deactivate GW == 회의록 상세 조회 == FE -> GW: 회의록 클릭\n회의록 상세 조회 요청 activate GW GW -> MS: 상세 조회 요청 (meetingId) activate MS MS -> RD: 캐시 조회 (Cache-Aside)\nKey: meeting:info:{meetingId} activate RD alt Cache Hit RD --> MS: 캐시 데이터 반환\n(회의 정보, 섹션별 내용, 관련 회의록) MS --> GW: 상세 데이터 반환 GW --> FE: 상세 정보 표시 else Cache Miss RD --> MS: 캐시 없음 deactivate RD MS -> MDB: DB 조회\n(회의 정보, 섹션별 내용, 관련 회의록) activate MDB MDB --> MS: 상세 데이터 deactivate MDB MS -> RD: 캐시 저장 (TTL 10분)\nKey: meeting:info:{meetingId} activate RD RD --> MS: 저장 완료 deactivate RD MS --> GW: 상세 데이터 반환 GW --> FE: 상세 정보 표시 end deactivate MS deactivate GW == 회의록 수정 == FE -> GW: 수정 버튼 클릭 activate GW GW -> MS: 권한 확인 요청 activate MS MS -> MS: 수정 권한 검증\n(본인 작성 회의록만 수정 가능) alt 권한 없음 MS --> GW: 권한 오류 GW --> FE: 수정 불가 알림 else 권한 있음 MS --> GW: 권한 확인 완료 GW --> FE: 수정 모드 진입 deactivate GW FE -> GW: 회의록 수정 내용 전송 activate GW GW -> MS: 수정 요청 MS -> MDB: 수정 내용 저장\n수정 이력 기록\n(수정자, 수정 시간, 변경 내용) activate MDB MDB --> MS: 저장 완료 deactivate MDB MS -> RD: 캐시 무효화\nKey: meeting:info:{meetingId} activate RD RD --> MS: 무효화 완료 deactivate RD MS ->> CS: 실시간 동기화 요청\n(비동기) activate CS CS ->> FE: WebSocket: 모든 참석자에게\n수정 델타 전송\n수정 영역 하이라이트 (3초간) deactivate CS MS -> MDB: 새 버전 번호 생성\n이전 버전 보관 activate MDB MDB --> MS: 버전 관리 완료 deactivate MDB note over MS: 확정완료 상태였던 경우\n작성중 상태로 변경 MS --> GW: 수정 완료 응답 GW --> FE: 수정 완료 표시 end deactivate MS deactivate GW @enduml