@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
