mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 11:26:25 +00:00
- 프롬프트 기반 회의록 개선 → 섹션 AI 요약 재생성으로 변경
- UFR-AI-030 → UFR-AI-035로 유저스토리 교체
- API 엔드포인트: POST /sections/{sectionId}/regenerate-summary
- 내부 시퀀스, 외부 시퀀스, API 설계서, 유저스토리 일관성 확보
- 프로토타입의 "AI 재생성" 버튼 기능과 정확히 매칭
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
180 lines
5.8 KiB
Plaintext
180 lines
5.8 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
|
|
|
|
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 -> Frontend: 회의록 클릭
|
|
activate Frontend
|
|
|
|
Frontend -> Gateway: GET /api/minutes/{minutesId}
|
|
activate Gateway
|
|
|
|
Gateway -> Meeting: GET /minutes/{minutesId}
|
|
activate Meeting
|
|
|
|
' 캐시 조회 (회의록 상세 정보)
|
|
Meeting --> Cache: GET minutes:detail:{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:detail:{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: PATCH /api/minutes/{minutesId}\n{\n "sections": [...],\n "modifiedBy": "userId",\n "timestamp": "...",\n "delta": {...}\n}
|
|
activate Gateway
|
|
|
|
Gateway -> Meeting: PATCH /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:detail:{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
|
|
|
|
== 섹션 AI 요약 재생성 (선택적) ==
|
|
|
|
User -> Frontend: "AI 재생성" 버튼 클릭\n(특정 섹션)
|
|
activate Frontend
|
|
|
|
Frontend -> Frontend: 로딩 상태 표시\n"AI 요약을 생성 중입니다..."
|
|
|
|
Frontend -> Gateway: POST /api/ai/sections/{sectionId}/regenerate-summary\n{\n "sectionContent": "**논의 사항:**\n- AI 기반...",\n "meetingId": "..."\n}
|
|
activate Gateway
|
|
|
|
Gateway -> AI: POST /sections/{sectionId}/regenerate-summary
|
|
activate AI
|
|
|
|
AI -> AI: 섹션 내용 분석 및 요약 생성\n- 회의 맥락 조회\n- LLM 기반 요약 (2-3문장)\n- 처리 시간: 2-5초
|
|
|
|
AI --> Gateway: 생성된 AI 요약\n{\n "summary": "AI 기반 회의록...",\n "generatedAt": "..."\n}
|
|
deactivate AI
|
|
|
|
Gateway --> Frontend: 200 OK\nAI 요약
|
|
deactivate Gateway
|
|
|
|
Frontend -> Frontend: AI 요약 영역 업데이트\n- 생성된 요약 표시\n- "저장됨" 표시
|
|
|
|
Frontend --> User: AI 요약 재생성 완료
|
|
deactivate Frontend
|
|
|
|
note over User, AI
|
|
AI 재생성 특징:
|
|
- 각 섹션별 독립 처리
|
|
- 사용자가 수정한 내용 기반
|
|
- 프롬프트 입력 없이 자동 생성
|
|
- 생성된 요약은 사용자가 다시 수정 가능
|
|
- 처리 시간 2-5초 (빠름)
|
|
end note
|
|
|
|
@enduml
|