@startuml Todo완료및회의록반영 !theme mono title Todo 완료 및 회의록 반영 플로우 actor "담당자" as User participant "Web App" as Web participant "API Gateway" as Gateway participant "Meeting Service" as Meeting participant "Redis Cache" as Redis participant "Notification Service" as Notification 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 autonumber == Todo 완료 처리 == User -> Web: Todo 완료 버튼 클릭 activate Web Web -> Gateway: PATCH /api/todos/{todoId}/complete\n(userId, userName, completedAt) activate Gateway Gateway -> Meeting: PATCH /todos/{todoId}/complete\n(userId, userName, completedAt) activate Meeting Meeting -> Meeting: Todo 상태 업데이트\n- 완료 시간 기록\n- 완료자 정보 저장\n- 상태: COMPLETED Meeting -> Meeting: 관련 회의록에 완료 상태 반영\n- 회의록 섹션 업데이트\n- 완료 표시 (체크 아이콘)\n- 완료 시간 및 완료자 기록 Meeting -> Meeting: DB에 저장 == 캐시 무효화 == Meeting --> Redis: DELETE dashboard:{assigneeId} note right 대시보드 캐시 무효화 end note Meeting --> Redis: DELETE minutes:detail:{minutesId} note right 회의록 상세 캐시 무효화 end note == 이벤트 발행 == Meeting -> Notification: NotificationRequest 이벤트 발행 activate Notification note right 이벤트 데이터: - 발송수단: EMAIL - 대상자: 회의록 작성자 - 메시지: Todo 완료 안내 - 메타데이터: todoId, 완료자, 완료 시간 end note Meeting --> Gateway: 200 OK\n{todoId, status: COMPLETED,\ncompletedAt, completedBy} deactivate Meeting Gateway --> Web: 200 OK\n(Todo 완료 정보) deactivate Gateway Web --> User: Todo 완료 표시 deactivate Web == 알림 발송 == Notification -> Notification: NotificationRequest 이벤트 구독 Notification -> Notification: 알림 메시지 생성\n- 수신자: 회의록 작성자\n- 내용: "Todo 완료됨" Notification --> Notification: 이메일 발송\n(회의록 작성자에게) note right 외부 Email Service 연동 end note deactivate Notification @enduml