@startuml 06-당첨자선정및알림 !theme mono title 유저플로우 06: 당첨자 선정 및 알림 actor "소상공인" as Owner actor "당첨자" as Winner participant "당첨자 선정 시스템" as LotterySystem participant "알림 발송 시스템" as NotificationSystem participant "KT 멤버십 시스템" as KTMembership participant "경품 지급 시스템" as RewardSystem database "참여자 DB" as ParticipantDB database "당첨 이력 DB" as WinnerDB == 이벤트스토밍 요소 == note over Owner, WinnerDB **Command**: 당첨자 선정, 알림 발송, 경품 지급 확인 **Event**: 이벤트 종료됨, 당첨자 자동선정됨, 당첨자 알림발송됨, 경품지급 완료됨 **Actor**: 소상공인, 당첨자 **External System**: 알림톡 시스템, KT 멤버십 포인트 시스템 **Policy**: 공정한 자동 추첨, 즉시 알림 발송 end note == 이벤트 종료 및 당첨자 선정 == Owner -> LotterySystem : **Command**: 당첨자 선정 요청\n(데이터: 이벤트ID, 당첨자 수) activate LotterySystem LotterySystem --> Owner : **Event**: 이벤트 종료됨 LotterySystem -> ParticipantDB : 전체 참여자 목록 조회 activate ParticipantDB ParticipantDB --> LotterySystem : 참여자 목록\n(데이터: 1,250명) deactivate ParticipantDB note right of LotterySystem **Policy**: 공정한 자동 추첨 - 난수 생성기 사용 - 중복 당첨 방지 - 투명한 선정 기준 - 블록체인 기록 (선택) end note LotterySystem -> LotterySystem : 무작위 추첨 실행\n(알고리즘: Cryptographically Secure Random) LotterySystem -> WinnerDB : 당첨자 정보 저장\n(데이터: 당첨자 목록, 추첨 시간, 추첨 알고리즘) activate WinnerDB WinnerDB --> LotterySystem : 저장 완료 deactivate WinnerDB LotterySystem --> Owner : **Event**: 당첨자 자동선정됨\n(데이터: 당첨자 목록[10명], 추첨 로그) note over Owner **당첨자 선정 완료** ✓ 총 참여: 1,250명 ✓ 당첨자: 10명 ✓ 당첨 확률: 0.8% ✓ 추첨 방식: 무작위 ✓ 추첨 시간: 2025-10-24 18:00 end note == 당첨자 알림 발송 == LotterySystem -> NotificationSystem : 알림 발송 요청\n(데이터: 당첨자 목록, 경품 정보) activate NotificationSystem par 병렬 알림 발송 loop 각 당첨자에게 NotificationSystem -> Winner : **Event**: 당첨자 알림발송됨\n(알림톡: 당첨 축하, 경품 수령 안내) note over Winner **당첨 알림** 🎉 축하합니다! ✓ 경품: KT 멤버십 5,000P ✓ 수령 방법: 자동 지급 ✓ 유효 기간: 30일 end note end NotificationSystem -> Owner : 알림 발송 현황 보고\n(데이터: 발송 완료 건수) end NotificationSystem --> LotterySystem : 알림 발송 완료 deactivate NotificationSystem == 경품 자동 지급 == alt 경품 유형: KT 멤버십 포인트 LotterySystem -> KTMembership : 포인트 지급 요청\n(데이터: 당첨자 전화번호, 포인트 금액) activate KTMembership note right of KTMembership **자동 포인트 지급** - 즉시 지급 처리 - 30일 유효 기간 - 사용 내역 추적 end note loop 각 당첨자 KTMembership -> Winner : 포인트 자동 적립\n(데이터: 5,000P) KTMembership --> Winner : 포인트 적립 완료 알림 end KTMembership --> LotterySystem : **Event**: 경품지급 완료됨\n(데이터: 지급 완료 목록) deactivate KTMembership else 경품 유형: 실물 경품 LotterySystem -> RewardSystem : 경품 배송 요청\n(데이터: 당첨자 정보, 배송 주소) activate RewardSystem RewardSystem -> Winner : 배송지 정보 수집\n(알림톡: 배송지 입력 요청) Winner --> RewardSystem : 배송지 정보 제공 RewardSystem --> LotterySystem : 배송 처리 완료 deactivate RewardSystem RewardSystem -> Winner : 배송 시작 알림\n(데이터: 송장 번호) end == 경품 지급 확인 및 완료 == LotterySystem -> WinnerDB : 경품 지급 이력 업데이트 activate WinnerDB WinnerDB --> LotterySystem : 업데이트 완료 deactivate WinnerDB LotterySystem --> Owner : 경품 지급 완료 보고\n(데이터: 지급 완료 목록, 지급 방식) note over Owner **경품 지급 완료** ✓ 포인트 지급: 10명 완료 ✓ 총 지급액: 50,000P ✓ 즉시 지급 처리 ✓ 수령 확인: 100% end note deactivate LotterySystem == 이벤트 종료 후 피드백 == NotificationSystem -> Winner : 이벤트 참여 감사 메시지\n(내용: 재방문 유도, 다음 이벤트 안내) activate NotificationSystem note over Winner **감사 메시지** ✓ 이벤트 참여 감사 ✓ 매장 재방문 혜택 안내 ✓ 다음 이벤트 예고 end note deactivate NotificationSystem Owner -> Owner : 이벤트 결과 검토 및\n다음 이벤트 기획 @enduml