@startuml 01-회원가입및매장등록
!theme mono

title 유저플로우 01: 회원가입 및 매장정보 등록

actor "소상공인" as Owner
participant "회원관리 시스템" as UserSystem
participant "KT 인증 시스템" as KTAuth
participant "사업자번호 검증 시스템" as BizVerify
database "회원 DB" as UserDB

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

note over Owner, UserDB
**Command**: 회원가입 요청, 매장정보 입력, 사업자번호 검증 요청
**Event**: 회원가입 요청됨, 인증 완료됨, 매장정보 입력됨,
         사업자번호 검증됨, 회원가입 완료됨
**Actor**: 소상공인
**External System**: KT 인증 시스템, 사업자번호 검증 시스템
**Policy**: 사업자번호가 유효해야 가입 가능
end note

== 회원가입 프로세스 ==

Owner -> UserSystem : **Command**: 회원가입 요청\n(데이터: 이름, 전화번호, 이메일)
activate UserSystem
UserSystem --> Owner : **Event**: 회원가입 요청됨

UserSystem -> KTAuth : 본인 인증 요청\n(데이터: 전화번호)
activate KTAuth
KTAuth --> UserSystem : **Event**: 인증 완료됨\n(데이터: 인증토큰)
deactivate KTAuth

UserSystem --> Owner : 인증 성공 알림

== 매장정보 등록 ==

Owner -> UserSystem : **Command**: 매장정보 입력\n(데이터: 매장명, 업종, 주소, 영업시간)
UserSystem --> Owner : **Event**: 매장정보 입력됨

Owner -> UserSystem : **Command**: 사업자번호 입력\n(데이터: 사업자번호)
UserSystem -> BizVerify : 사업자번호 검증 요청\n(데이터: 사업자번호, 매장명)
activate BizVerify

note right of BizVerify
**Policy**: 사업자번호가
유효해야 가입 가능
- 국세청 DB 조회
- 휴폐업 여부 확인
end note

BizVerify --> UserSystem : **Event**: 사업자번호 검증됨\n(데이터: 검증결과, 사업자정보)
deactivate BizVerify

alt 검증 성공
    UserSystem -> UserDB : 회원 정보 저장\n(데이터: 회원정보, 매장정보)
    activate UserDB
    UserDB --> UserSystem : 저장 완료
    deactivate UserDB

    UserSystem --> Owner : **Event**: 회원가입 완료됨\n(데이터: 회원ID, 무료체험 쿠폰)

    note over Owner
    **무료 체험 혜택**
    - 첫 1회 이벤트 무료
    - 5분 만에 시작 가능
    end note

else 검증 실패
    UserSystem --> Owner : 검증 실패 알림\n(사유: 유효하지 않은 사업자번호)
    Owner -> UserSystem : 사업자번호 재입력
end

deactivate UserSystem

@enduml
