@startuml
!theme mono

title 01. 회의 준비 및 시작 - 이벤트스토밍 플로우

actor "회의록 작성자" as User
participant "회의록 시스템" as System
participant "캘린더 시스템" as Calendar
participant "알림 시스템" as Notification

== 회의 예약 ==

User -> System : **커맨드**: 회의 예약하기\n(데이터: 회의 제목, 날짜/시간, 장소, 참석자 목록)
activate System
System -> System : 회의 정보 검증
System --> User : **이벤트**: 회의가 예약됨\n(데이터: 회의 ID, 회의 정보)
deactivate System

note right of System
**Policy/Rule**:
회의 예약 시 →
자동으로 참석자에게
초대 이메일 발송
end note

System -> Calendar : 일정 동기화 요청\n(데이터: 회의 정보, 캘린더 ID)
Calendar --> System : **이벤트**: 일정이 캘린더에 등록됨

System -> Notification : 초대 알림 발송 요청\n(데이터: 참석자 목록, 회의 정보)
Notification --> System : **이벤트**: 참석자가 초대됨\n(데이터: 참석자 목록, 초대 상태)
Notification -> User : 초대 이메일 발송
Notification -> User : **이벤트**: 알림이 발송됨\n(데이터: 알림 ID, 발송 대상)

== 회의록 도구 준비 ==

User -> System : **커맨드**: 회의록 템플릿 선택하기\n(데이터: 템플릿 ID, 커스터마이징 옵션)
activate System
System -> System : 템플릿 로드 및 설정
System --> User : **이벤트**: 회의록 도구가 준비됨\n(데이터: 회의록 ID, 템플릿 정보)
deactivate System

== 회의 시작 전 리마인더 ==

note over System, Notification
**Policy/Rule**:
회의 시작 30분 전 →
참석자에게 리마인더 발송
end note

System -> Notification : 리마인더 발송 (30분 전)
Notification -> User : 회의 시작 알림

== 회의 시작 ==

User -> System : **커맨드**: 회의 시작하기\n(데이터: 회의 ID, 시작 시간)
activate System
System -> System : 회의 세션 생성
System -> System : 음성 녹음 준비
System --> User : **이벤트**: 회의가 시작됨\n(데이터: 회의 ID, 시작 시간, 참석자 수)
deactivate System

note over User, Notification
**Actor**: 회의록 작성자
**External System**: 캘린더 시스템, 알림 시스템
**커맨드 데이터**: 회의 정보, 템플릿 설정
**이벤트 데이터**: 회의 ID, 상태, 참석자 정보
end note

@enduml
