Outer sequence 다이어그램 수정
1. 고객참여플로우 - 재추첨 버튼 UI 요소 제거 2. 사용자인증플로우 - 로그인 input 전화번호 → 이메일/비밀번호로 변경 - 회원가입 시 이메일 중복검사 로직 추가 - 전화번호 중복검사도 유지 (이메일 검사 후 수행) 3. 성과분석플로우 - Redis Cache TTL 5분 → 1시간으로 변경 - 배치 수집 주기 10분 → 5분으로 변경 4. 이벤트생성플로우 - 회원/매장정보 조회를 FE에서 직접 수행 후 전달 - 이벤트 초안 데이터 Redis 저장 (draft:event 키) - 최종 승인 시에만 Event DB에 영구 저장 - AI Service 과거 이벤트 데이터 조회 로직 삭제 - 이미지 생성 요청 FE → Content Service 다이렉트 호출 - Job 상태 확인도 Content Service로 직접 조회 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -21,18 +21,20 @@ participant "배포 채널 APIs" as ChannelApis
|
||||
|
||||
== 1. 이벤트 목적 선택 (UFR-EVENT-020) ==
|
||||
User -> FE: 이벤트 목적 선택
|
||||
FE -> Gateway: POST /events/purposes\n{목적, userId}
|
||||
Gateway -> Event: 이벤트 목적 저장 요청
|
||||
Event -> UserSvc: GET /api/users/{userId}/store\n회원 및 매장정보 조회
|
||||
FE -> UserSvc: GET /api/users/{userId}/store\n회원 및 매장정보 조회
|
||||
activate UserSvc
|
||||
UserSvc -> UserDB: 사용자 및 매장 정보 조회
|
||||
activate UserDB
|
||||
UserDB --> UserSvc: 사용자, 매장 정보 반환
|
||||
deactivate UserDB
|
||||
UserSvc --> Event: 200 OK\n{userId, storeName, industry, address}
|
||||
UserSvc --> FE: 200 OK\n{userId, storeName, industry, address}
|
||||
deactivate UserSvc
|
||||
Event -> EventDB: 이벤트 목적 정보 저장\n(목적, 매장정보 저장)
|
||||
EventDB --> Event: 저장 완료
|
||||
FE -> Gateway: POST /events/purposes\n{목적, userId, storeName, industry, address}
|
||||
Gateway -> Event: 이벤트 목적 저장 요청
|
||||
Event -> Redis: 이벤트 목적 정보 저장\nKey: draft:event:{eventDraftId}\n(목적, 매장정보 저장)\nTTL: 24시간
|
||||
activate Redis
|
||||
Redis --> Event: 저장 완료
|
||||
deactivate Redis
|
||||
Event --> Gateway: 저장 완료\n{eventDraftId}
|
||||
Gateway --> FE: 200 OK
|
||||
FE --> User: AI 추천 화면으로 이동
|
||||
@@ -49,9 +51,7 @@ FE --> User: "AI가 분석 중입니다..." (로딩)
|
||||
note over AI: Kafka Consumer\nai 이벤트 생성 topic 구독
|
||||
Kafka --> AI: Consume Job Message\n{jobId, eventDraftId, ...}
|
||||
|
||||
AI -> EventDB: 과거 이벤트 데이터 조회\n(업종, 지역 기반 통계 조회)
|
||||
EventDB --> AI: 이벤트 통계 데이터
|
||||
AI -> AIApi: 트렌드 분석 및 이벤트 추천 요청\n{목적, 업종, 지역, 과거데이터, 매장정보}\n[Circuit Breaker, Timeout: 5분]
|
||||
AI -> AIApi: 트렌드 분석 및 이벤트 추천 요청\n{목적, 업종, 지역, 매장정보}\n[Circuit Breaker, Timeout: 5분]
|
||||
AIApi --> AI: 3가지 추천안 + 트렌드 요약\n(예: "여름철 시원한 음료 선호도 증가")
|
||||
AI -> Redis: AI 추천 결과 저장\nKey: ai:event:{eventDraftId}\n(3가지 추천안, 트렌드 요약)\nTTL: 24시간
|
||||
Redis --> AI: 저장 완료
|
||||
@@ -80,18 +80,20 @@ end
|
||||
User -> FE: 추천안 선택\n(제목/경품 커스텀)
|
||||
FE -> Gateway: PUT /events/drafts/{eventDraftId}\n{선택한 추천안, 커스텀 정보}
|
||||
Gateway -> Event: 선택 저장
|
||||
Event -> EventDB: 선택한 추천안 저장\n(이벤트 초안 업데이트)
|
||||
EventDB --> Event: 업데이트 완료
|
||||
Event -> Redis: 선택한 추천안 저장\nKey: draft:event:{eventDraftId}\n(이벤트 초안 업데이트)\nTTL: 24시간
|
||||
activate Redis
|
||||
Redis --> Event: 업데이트 완료
|
||||
deactivate Redis
|
||||
Event --> Gateway: 200 OK
|
||||
Gateway --> FE: 저장 완료
|
||||
FE --> User: 콘텐츠 생성 화면으로 이동
|
||||
|
||||
== 3. SNS 이미지 생성 - 비동기 처리 (UFR-CONT-010) ==
|
||||
User -> FE: 이미지 생성 요청
|
||||
FE -> Gateway: POST /api/events/{eventDraftId}/content-generation
|
||||
Gateway -> Event: 이미지 생성 요청
|
||||
Event -> Event: Job 생성\n{jobId, eventDraftId, status: PENDING}
|
||||
Event --> Gateway: Job 생성 완료\n{jobId, status: PENDING}
|
||||
FE -> Gateway: POST /api/content/images/{eventDraftId}/generate
|
||||
Gateway -> Content: 이미지 생성 요청
|
||||
Content -> Content: Job 생성\n{jobId, eventDraftId, status: PENDING}
|
||||
Content --> Gateway: Job 생성 완료\n{jobId, status: PENDING}
|
||||
Gateway --> FE: 202 Accepted\n{jobId}
|
||||
FE --> User: "이미지 생성 중..." (로딩)
|
||||
|
||||
@@ -124,17 +126,17 @@ note over Content, Redis: 이미지 URL은 Redis에 저장\n- 최종 승인 시
|
||||
|
||||
group Polling으로 상태 확인
|
||||
loop 상태 확인 (최대 30초)
|
||||
FE -> Gateway: GET /jobs/{jobId}/status
|
||||
Gateway -> Event: Job 상태 조회
|
||||
Event -> Redis: Job 상태 조회\n(jobId로 상태 및 이미지 URL 조회)
|
||||
Redis --> Event: {status, imageUrls}
|
||||
FE -> Gateway: GET /api/content/jobs/{jobId}/status
|
||||
Gateway -> Content: Job 상태 조회
|
||||
Content -> Redis: Job 상태 조회\n(jobId로 상태 및 이미지 URL 조회)
|
||||
Redis --> Content: {status, imageUrls}
|
||||
|
||||
alt Job 완료
|
||||
Event --> Gateway: 200 OK\n{status: COMPLETED, imageUrls}
|
||||
Content --> Gateway: 200 OK\n{status: COMPLETED, imageUrls}
|
||||
Gateway --> FE: 이미지 URL 반환
|
||||
FE --> User: 3가지 스타일 카드 표시
|
||||
else Job 진행중
|
||||
Event --> Gateway: 200 OK\n{status: PENDING/PROCESSING}
|
||||
Content --> Gateway: 200 OK\n{status: PENDING/PROCESSING}
|
||||
Gateway --> FE: 진행중 상태
|
||||
note over FE: 2초 후 재요청
|
||||
end
|
||||
@@ -144,8 +146,10 @@ end
|
||||
User -> FE: 스타일 선택 및 편집
|
||||
FE -> Gateway: PUT /events/drafts/{eventDraftId}/content\n{선택한 이미지, 편집내용}
|
||||
Gateway -> Event: 콘텐츠 선택 저장
|
||||
Event -> EventDB: 선택한 콘텐츠 저장\n(이벤트 초안 업데이트)
|
||||
EventDB --> Event: 업데이트 완료
|
||||
Event -> Redis: 선택한 콘텐츠 저장\nKey: draft:event:{eventDraftId}\n(이벤트 초안 업데이트)\nTTL: 24시간
|
||||
activate Redis
|
||||
Redis --> Event: 업데이트 완료
|
||||
deactivate Redis
|
||||
Event --> Gateway: 200 OK
|
||||
Gateway --> FE: 저장 완료
|
||||
FE --> User: 배포 채널 선택 화면으로 이동
|
||||
@@ -157,6 +161,11 @@ Gateway -> Event: 최종 승인 및 배포 처리
|
||||
|
||||
note over Event: Redis 데이터를 Event DB에 영구 저장
|
||||
|
||||
Event -> Redis: 이벤트 초안 조회\nKey: draft:event:{eventDraftId}
|
||||
activate Redis
|
||||
Redis --> Event: 이벤트 초안 데이터\n(목적, 매장정보, 추천안, 콘텐츠)
|
||||
deactivate Redis
|
||||
|
||||
Event -> Redis: AI 추천 결과 조회\nKey: ai:event:{eventDraftId}
|
||||
activate Redis
|
||||
Redis --> Event: AI 추천 결과
|
||||
@@ -167,7 +176,7 @@ activate Redis
|
||||
Redis --> Event: 이미지 URL 목록
|
||||
deactivate Redis
|
||||
|
||||
Event -> EventDB: 이벤트 정보 영구 저장\n(AI 추천, 이미지 URL, 배포 채널 포함)
|
||||
Event -> EventDB: 이벤트 정보 영구 저장\n(목적, 매장정보, AI 추천, 이미지 URL, 배포 채널 포함)
|
||||
EventDB --> Event: 저장 완료
|
||||
|
||||
Event -> EventDB: 이벤트 상태 변경\n(DRAFT → APPROVED로 업데이트)
|
||||
|
||||
Reference in New Issue
Block a user