FanPulse Event Storming 결과

프로젝트 정보

항목 내용
프로젝트명 FanPulse
작성일 2025-12-28
버전 1.0.0

1. Event Storming 개요

Event Storming은 도메인 이벤트를 중심으로 비즈니스 프로세스를 시각화하는 방법론입니다. 이 문서는 FanPulse의 주요 비즈니스 흐름을 이벤트 중심으로 정리합니다.

범례

색상 의미
주황색 Domain Event (과거형)
파란색 Command (명령)
노란색 Aggregate
분홍색 External System
보라색 Policy (정책)
초록색 Read Model

2. 사용자 가입 및 인증 흐름

sequenceDiagram
    participant User as 사용자
    participant Identity as Identity Context
    participant Notification as Notification Context
    participant Reward as Reward Context

    rect rgb(200, 230, 255)
        Note over User,Identity: 이메일 회원가입
        User->>Identity: RegisterWithEmail
        Identity->>Identity: 이메일 중복 검증
        Identity->>Identity: 비밀번호 해시
        Identity-->>Identity: UserRegistered
    end

    rect rgb(255, 230, 200)
        Note over Identity,Notification: 이벤트 처리
        Identity-->>Notification: UserRegistered 이벤트
        Identity-->>Reward: UserRegistered 이벤트
        Notification->>User: 환영 알림 전송
        Reward->>Reward: 초기 포인트 지급 (+100P)
    end

    rect rgb(200, 255, 230)
        Note over User,Identity: 로그인
        User->>Identity: LoginWithEmail
        Identity->>Identity: 비밀번호 검증
        Identity-->>Identity: UserLoggedIn
        Identity->>User: JWT 토큰 반환
    end

이벤트 목록

이벤트 트리거 구독자 처리
UserRegistered 회원가입 완료 Notification, Reward 환영 알림, 초기 포인트
UserLoggedIn 로그인 성공 - 세션 기록
PasswordChanged 비밀번호 변경 Notification 보안 알림
UserDeleted 회원 탈퇴 All 연관 데이터 정리

3. 투표 참여 흐름

sequenceDiagram
    participant User as 사용자
    participant Voting as Voting Context
    participant Membership as Membership Context
    participant Reward as Reward Context
    participant Notification as Notification Context

    rect rgb(200, 230, 255)
        Note over User,Voting: 투표 참여
        User->>Voting: CastVote
        Voting->>Voting: 투표 상태 검증 (ACTIVE)
        Voting->>Voting: 중복 투표 검증
        Voting->>Voting: 투표권 확인
    end

    rect rgb(255, 230, 200)
        Note over Voting,Membership: VIP 혜택 확인
        Voting->>Membership: GetMembershipStatus
        Membership-->>Voting: VIP 여부 반환
    end

    rect rgb(200, 255, 230)
        Note over Voting,Notification: 투표 처리
        Voting->>Voting: 투표권 차감
        Voting->>Voting: 투표 기록
        Voting->>Voting: 옵션 카운트 증가
        Voting-->>Voting: VoteCasted
    end

    rect rgb(255, 200, 230)
        Note over Voting,Notification: 이벤트 처리
        Voting-->>Reward: VoteCasted 이벤트
        Voting-->>Notification: VoteCasted 이벤트
        Reward->>Reward: 포인트 적립 (+5P)
        Notification->>User: 투표 완료 알림
    end

투표 정책 (Policy)

graph LR
    subgraph 투표권 정책
        A[일일 리셋 정책] --> B[자정에 DailyVotes 리셋]
        C[VIP 정책] --> D[VIP는 일일 3회, FREE는 1회]
        E[보너스 정책] --> F[광고 시청 시 +1 투표권]
    end

    subgraph 투표 제한 정책
        G[중복 방지] --> H[투표당 1회만 참여 가능]
        I[마감 검증] --> J[마감된 투표 참여 불가]
    end

이벤트 목록

이벤트 트리거 구독자 처리
VoteCasted 투표 완료 Reward, Notification 포인트 적립, 알림
PollCreated 투표 생성 Notification 신규 투표 알림
PollClosed 투표 마감 Notification 결과 발표 알림
BonusVotesAdded 보너스 획득 - 투표권 추가
DailyVotesReset 자정 리셋 - 일일 투표권 초기화