MAKITTHandoff
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=local Redis 설정 안 하면 silently skip → ack & return. 검증 시 항상 토글 먼저 세팅

ShopCreated event 신설 → outbox 통과 후 makitt-consumer 의 ShopCreatedArgoSyncDispatcher 가 ARGO 토픽 makitt-shop-created 으로 전달 → cms-consumer MakittShopCreatedConsumerContainer 가 MakittSalesChannelApplication.create (idempotent) 호출 → sales_channel row 1건.

사전 조건

  1. finn shop 의 shopId + organizationId 알아두기 (makitt-db 쿼리)
  2. organization 에 ARGO PartnerConnection (status=ACTIVE) 존재 확인 + externalIds.argoVendorId 알아두기
  3. 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")

  1. MAKITT web 에서 finn organization 으로 신규 shop 1건 생성 (또는 POST /api/v1/shops 직접 호출)
  2. makitt-api 로그: Outbox PENDING: eventType=ShopCreated, ...
  3. OutboxRelay 로그: OutboxRelay: PUBLISHED eventType=ShopCreated, ... → makitt.domain.v1
  4. makitt-consumer 로그: [ShopCreatedArgoSync] produced makitt-shop-created. eventId=... vendorId=... shopId=...
  5. argo-cms-consumer 로그: [MAKITT shop-created] 수신 vendorId=..., shopId=..., shopName=...
  6. argo-cms-consumer 로그: [MAKITT] sales_channel created. vendorId=..., shopId=..., salesChannelId=...
  7. 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")

  1. finn 처럼 이미 shop 가진 organization 에 ARGO PartnerConnection 새로 link (또는 강제 재link)
  2. makitt-api 로그: org 의 shop 마다 Outbox PENDING: eventType=ShopCreated
  3. argo-cms-consumer 가 N건 모두 처리 — sales_channel 이 이미 있으면 [MAKITT] sales_channel already exists. ... skip create (idempotent OK)
  4. 없는 shop 이 있었다면 그건 신규 created

Path C — Idempotent 검증

  1. Path A 끝난 직후, 같은 shopId 로 outbox 에 ShopCreated 1건 더 강제 publish (admin 도구 또는 수동 SQL)
  2. argo-cms-consumer 로그: sales_channel already exists. ... skip create 확인 — DB row 그대로 1건
sales_channel_idnamemall_id (= MAKITT shopId)path
11134Finn Shop3d08aa8c-... (finn 원본)C-1 (kcat)
11135Second Shopaaaaaaaa-...C-3 (kcat)
11136finn pathA 160141ad545d4f-...A (POST /shops)
11137finn e2e shop 15581025e85583-...B (link fan-out backfill)

비어 있음

당신이 처리할 항목

docs / spec / finished / makitt-sales-channel-sync / e2e.md