Handoff Boards
finishedmakitt-sales-channel-sync
MAKITT Sales Channel Sync — E2E Handoff 보드
MAKITT Sales Channel Sync — E2E Handoff 보드
- 다음 세션 진입점 메모리 + spec stub 생성 (2026-05-02)
- 기존 partner link 시점 자동 생성 흐름 조사 — link 가 아니라 createShipper 시점에만 sync 호출됨 확인
- 시나리오 합의 (ShopCreated event + MAKITT 측 fan-out / 동기 호출 유지 + cms idempotent)
- 코드 작성: MAKITT (payload/catalog/publish/dispatcher) + ARGO CMS (topic/message/container/idempotent)
- makitt-server compileJava 통과
- argo-cms cms-consumer:compileJava 통과
- Path C (ARGO 신규개발본 단독) kcat → cms-consumer 검증 통과 (2026-05-03 15:20)
- C-1 신규 shop 생성: salesChannelId=11134
- C-2 같은 (vendorId, shopId) 재발행:
already exists ... skip create(idempotent OK) - C-3 다른 shop 같은 vendor: salesChannelId=11135 (새 row)
-
store_platform_id=10089정체 풀림 —B2B_SELF_PLATFORM(B2B 플랫폼). MAKITT 와 무관, 일반 vendor approval 기본 부수효과 - Path A (MAKITT 풀루프) 검증 통과 (2026-05-03 16:01) — POST /api/v1/shops → outbox PENDING → OutboxRelay PUBLISHED → ShopCreatedArgoSyncDispatcher produced → cms-consumer received → salesChannelId=11136 created. 6단계 trace 정상
- Path B (link 시점 fan-out) 검증 통과 (2026-05-03 16:02) — POST /partners/ARGO/onboarding/link → finn org 의 3 shop 모두 ShopCreated 발행 (
reason=partner_linked). 신규 1건 (11137) + idempotent skip 2건 (11134, 11136). 이전 toggle off 로 미발행되었던 shop (25e85583) 이 link 시점 backfill 으로 채워짐 — 의도대로 작동 - Local consumer 토글 함정 확인 —
ConsumerToggleService.shouldProcess()가 OutboxRelay 와 ShopCreatedArgoSyncDispatcher 양쪽에 적용. local profile 에서consumer:active=localRedis 설정 안 하면 silently skip → ack & return. 검증 시 항상 토글 먼저 세팅
ShopCreated event 신설 → outbox 통과 후 makitt-consumer 의 ShopCreatedArgoSyncDispatcher 가 ARGO 토픽 makitt-shop-created 으로 전달 → cms-consumer MakittShopCreatedConsumerContainer 가 MakittSalesChannelApplication.create (idempotent) 호출 → sales_channel row 1건.
사전 조건
- finn shop 의
shopId+organizationId알아두기 (makitt-db 쿼리) - organization 에 ARGO PartnerConnection (status=ACTIVE) 존재 확인 +
externalIds.argoVendorId알아두기 - finn shop 에 대해 ARGO sales_channel 이 현재 없거나 있다면 mallId=shopId 인 row 인지 확인 (있으면 idempotent skip 검증, 없으면 신규 생성 검증)
띄울 서비스 (ARGO 만 신규개발본)
- argo-cms (cms-api + cms-consumer) — 새 토픽 listen 위해
- makitt-api / makitt-consumer — 이미 dev 에 떠있는 본 사용 가능 (코드 변경분 dev 에 배포 필요)
Path A — shop 생성 시 (ShopCreated reason="shop_created")
- MAKITT web 에서 finn organization 으로 신규 shop 1건 생성 (또는
POST /api/v1/shops직접 호출) - makitt-api 로그:
Outbox PENDING: eventType=ShopCreated, ... - OutboxRelay 로그:
OutboxRelay: PUBLISHED eventType=ShopCreated, ...→makitt.domain.v1 - makitt-consumer 로그:
[ShopCreatedArgoSync] produced makitt-shop-created. eventId=... vendorId=... shopId=... - argo-cms-consumer 로그:
[MAKITT shop-created] 수신 vendorId=..., shopId=..., shopName=... - argo-cms-consumer 로그:
[MAKITT] sales_channel created. vendorId=..., shopId=..., salesChannelId=... - argo-dev-db 로
select * from cms.sales_channel where vendor_id=<argoVendorId> and mall_id='<shopId>' and store_platform_id=10093;→ row 1건 확인
Path B — partner link 시 fan-out (ShopCreated reason="partner_linked")
- finn 처럼 이미 shop 가진 organization 에 ARGO PartnerConnection 새로 link (또는 강제 재link)
- makitt-api 로그: org 의 shop 마다
Outbox PENDING: eventType=ShopCreated - argo-cms-consumer 가 N건 모두 처리 — sales_channel 이 이미 있으면
[MAKITT] sales_channel already exists. ... skip create(idempotent OK) - 없는 shop 이 있었다면 그건 신규 created
Path C — Idempotent 검증
- Path A 끝난 직후, 같은 shopId 로 outbox 에 ShopCreated 1건 더 강제 publish (admin 도구 또는 수동 SQL)
- argo-cms-consumer 로그:
sales_channel already exists. ... skip create확인 — DB row 그대로 1건
| sales_channel_id | name | mall_id (= MAKITT shopId) | path |
|---|---|---|---|
| 11134 | Finn Shop | 3d08aa8c-... (finn 원본) | C-1 (kcat) |
| 11135 | Second Shop | aaaaaaaa-... | C-3 (kcat) |
| 11136 | finn pathA 160141 | ad545d4f-... | A (POST /shops) |
| 11137 | finn e2e shop 155810 | 25e85583-... | B (link fan-out backfill) |
비어 있음
당신이 처리할 항목
docs / spec / finished / makitt-sales-channel-sync / e2e.md