edit outer sequence

This commit is contained in:
cherry2250
2025-10-22 17:32:19 +09:00
parent 7a1fcc96de
commit a8c6397edf
3 changed files with 64 additions and 189 deletions
@@ -11,7 +11,6 @@ participant "AI Service" as AI
participant "Content Service" as Content
participant "Distribution Service" as Dist
participant "Kafka" as Kafka
participant "Redis Cache" as Cache
database "Event DB" as EventDB
participant "외부 AI API" as AIApi
participant "이미지 생성 API" as ImageApi
@@ -21,14 +20,8 @@ participant "배포 채널 APIs" as ChannelApis
User -> FE: 이벤트 목적 선택
FE -> Gateway: POST /events/purposes\n{목적, 매장정보}
Gateway -> Event: 이벤트 목적 저장 요청
Event -> Cache: 캐시 조회\nkey: purpose:{userId}
alt 캐시 히트
Cache --> Event: 캐시된 데이터
else 캐시 미스
Event -> EventDB: 이벤트 목적 저장
EventDB --> Event: 저장 완료
Event -> Cache: 캐시 저장\nTTL: 30분
end
Event -> EventDB: 이벤트 목적 저장
EventDB --> Event: 저장 완료
Event --> Gateway: 저장 완료\n{eventDraftId}
Gateway --> FE: 200 OK
FE --> User: AI 추천 화면으로 이동
@@ -42,38 +35,29 @@ Event --> Gateway: Job 생성 완료\n{jobId, status: PENDING}
Gateway --> FE: 202 Accepted\n{jobId}
FE --> User: "AI가 분석 중입니다..." (로딩)
note over AI: Kafka Consumer\nai-job-topic 구독
note over AI: Kafka Consumer\nai 이벤트 생성 topic 구독
Kafka --> AI: Consume Job Message\n{jobId, eventDraftId, ...}
AI -> Cache: 트렌드 분석 캐시 조회\nkey: trend:{업종}:{지역}
alt 캐시 히트
Cache --> AI: 캐시된 트렌드 데이터
else 캐시 미스
AI -> EventDB: 과거 이벤트 데이터 조회
EventDB --> AI: 이벤트 통계 데이터
AI -> AIApi: 트렌드 분석 요청\n{업종, 지역, 과거데이터}
AIApi --> AI: 트렌드 분석 결과
AI -> Cache: 트렌드 캐시 저장\nTTL: 1시간
end
AI -> AIApi: 이벤트 추천 요청\n{목적, 트렌드, 매장정보}
AIApi --> AI: 3가지 추천안 생성
AI -> EventDB: 추천 결과 저장
AI -> EventDB: 과거 이벤트 데이터 조회
EventDB --> AI: 이벤트 통계 데이터
AI -> AIApi: 트렌드 분석 및 이벤트 추천 요청\n{목적, 업종, 지역, 과거데이터, 매장정보}
AIApi --> AI: 3가지 추천안 + 트렌드 요약\n(예: "여름철 시원한 음료 선호도 증가")
AI -> EventDB: 추천 결과 및 트렌드 요약 저장
EventDB --> AI: 저장 완료
AI -> Cache: Job 상태 업데이트\nkey: job:{jobId}\nstatus: COMPLETED
AI -> Kafka: Publish to event-topic\nEventRecommended\n{jobId, eventDraftId, recommendations}
AI -> EventDB: Job 상태 업데이트\nstatus: COMPLETED
AI -> Kafka: Publish to event-topic\nEventRecommended\n{jobId, eventDraftId, recommendations, trendSummary}
group Polling으로 상태 확인
loop 상태 확인 (최대 30초)
FE -> Gateway: GET /jobs/{jobId}/status
Gateway -> Event: Job 상태 조회
Event -> Cache: 캐시에서 Job 상태 확인
Cache --> Event: {status, result}
Event -> EventDB: Job 상태 및 결과 조회
EventDB --> Event: {status, result}
alt Job 완료
Event --> Gateway: 200 OK\n{status: COMPLETED, recommendations}
Gateway --> FE: 추천 결과 반환
FE --> User: 3가지 추천안 표시\n(제목/경품 수정 가능)
Event --> Gateway: 200 OK\n{status: COMPLETED, recommendations, trendSummary}
Gateway --> FE: 추천 결과 및 트렌드 요약 반환
FE --> User: 트렌드 요약 표시\n3가지 추천안 표시\n(제목/경품 수정 가능)
else Job 진행중
Event --> Gateway: 200 OK\n{status: PENDING/PROCESSING}
Gateway --> FE: 진행중 상태
@@ -100,7 +84,7 @@ Event --> Gateway: Job 생성 완료\n{jobId, status: PENDING}
Gateway --> FE: 202 Accepted\n{jobId}
FE --> User: "이미지 생성 중..." (로딩)
note over Content: Kafka Consumer\nimage-job-topic 구독
note over Content: Kafka Consumer\n이미지 생성 topic 구독
Kafka --> Content: Consume Job Message\n{jobId, eventDraftId, ...}
par 심플 스타일
@@ -116,15 +100,15 @@ end
Content -> EventDB: 이미지 URL 저장
EventDB --> Content: 저장 완료
Content -> Cache: Job 상태 업데이트\nkey: job:{jobId}\nstatus: COMPLETED
Content -> EventDB: Job 상태 업데이트\nstatus: COMPLETED
Content -> Kafka: Publish to event-topic\nContentCreated\n{jobId, eventDraftId, imageUrls}
group Polling으로 상태 확인
loop 상태 확인 (최대 30초)
FE -> Gateway: GET /jobs/{jobId}/status
Gateway -> Event: Job 상태 조회
Event -> Cache: 캐시에서 Job 상태 확인
Cache --> Event: {status, imageUrls}
Event -> EventDB: Job 상태 및 결과 조회
EventDB --> Event: {status, imageUrls}
alt Job 완료
Event --> Gateway: 200 OK\n{status: COMPLETED, imageUrls}