@startuml 05-이벤트참여및접수
!theme mono

title 유저플로우 05: 이벤트 참여 및 접수 관리

actor "고객" as Customer
actor "소상공인" as Owner
participant "이벤트 참여 시스템" as ParticipationSystem
participant "SMS/알림톡 시스템" as Notification
database "참여자 DB" as ParticipantDB

== 이벤트스토밍 요소 ==

note over Customer, ParticipantDB
**Command**: 이벤트참여신청, 참여정보검증, 중복체크수행, 참여접수,
         당첨자추첨, 당첨알림발송
**Event**: 고객이이벤트발견함, 참여신청됨, 참여정보검증됨, 중복참여차단됨,
         참여접수완료됨, 당첨자추첨완료됨, 당첨알림발송됨
**Actor**: 고객, 소상공인
**External System**: SMS/카카오알림톡 발송 시스템
**Policy**: 1인 1회 참여 제한, 매장 방문 고객 가산점 부여,
         공정한 추첨 알고리즘 적용, 개인정보 보호 규정 준수
end note

== 고객의 이벤트 발견 ==

Customer -> ParticipationSystem : **Event**: 고객이이벤트발견함\n(경로: 우리동네TV/SNS/QR코드)
activate ParticipationSystem

ParticipationSystem --> Customer : 이벤트 상세 정보 제공\n(경품, 참여방법, 당첨확률)

== 이벤트 참여 신청 ==

Customer -> ParticipationSystem : **Command**: 이벤트참여신청\n(데이터: 고객명, 전화번호, 참여경로)
ParticipationSystem --> Customer : **Event**: 참여신청됨

== 참여 정보 검증 ==

ParticipationSystem -> ParticipationSystem : **Command**: 참여정보검증\n(데이터: 전화번호, 매장방문여부)
activate ParticipationSystem

note right of ParticipationSystem
**Policy**: 1인 1회 참여 제한
- 전화번호 기반 중복 체크
- 매장 방문 고객 가산점
- 허위 정보 필터링
end note

ParticipationSystem --> ParticipationSystem : **Event**: 참여정보검증됨
deactivate ParticipationSystem

== 중복 참여 체크 ==

ParticipationSystem -> ParticipantDB : **Command**: 중복체크수행\n(데이터: 전화번호, 이벤트ID)
activate ParticipantDB

alt 중복 참여
    ParticipantDB --> ParticipationSystem : **Event**: 중복참여차단됨
    ParticipationSystem --> Customer : 중복 참여 불가 안내
else 정상 참여
    ParticipantDB --> ParticipationSystem : 중복 없음
    deactivate ParticipantDB
    
    == 참여 접수 완료 ==
    
    ParticipationSystem -> ParticipantDB : **Command**: 참여접수\n(데이터: 참여ID, 참여일시, 참여채널)
    activate ParticipantDB
    ParticipantDB --> ParticipationSystem : **Event**: 참여접수완료됨
    deactivate ParticipantDB
    
    ParticipationSystem --> Customer : 참여 완료 안내\n(응모번호, 당첨 발표일)
end

== 이벤트 종료 후 당첨자 추첨 ==

note over ParticipationSystem
이벤트 종료 시각 도래
자동 추첨 프로세스 시작
end note

ParticipationSystem -> ParticipantDB : **Command**: 당첨자추첨\n(데이터: 참여자목록, 당첨인원, 추첨방식)
activate ParticipantDB

note right of ParticipantDB
**Policy**: 공정한 추첨
- 난수 기반 무작위 추첨
- 매장 방문 고객 가산점
- 추첨 과정 로그 기록
end note

ParticipantDB --> ParticipationSystem : **Event**: 당첨자추첨완료됨\n(데이터: 당첨자목록)
deactivate ParticipantDB

== 당첨 알림 발송 ==

ParticipationSystem -> Notification : **Command**: 당첨알림발송\n(데이터: 당첨자목록, 경품정보)
activate Notification

Notification -> Customer : SMS/카카오알림톡 발송\n(당첨 축하, 경품 수령 안내)
Notification --> ParticipationSystem : **Event**: 당첨알림발송됨
deactivate Notification

ParticipationSystem --> Owner : 당첨자 명단 제공\n(경품 지급 안내)

note over Customer, Owner
**참여 및 접수 자동화 완료**
고객: 간편한 참여 (1분 이내)
소상공인: 자동 접수 및 추첨
         수동 관리 불필요
end note

deactivate ParticipationSystem

@enduml
