MAKITTDocs

Shop API Schema Mismatch Report

docs/api/schema-mismatch-report.md

Shop API Schema Mismatch Report

Generated: 2026-03-31 Source: pnpm --filter @makitt/api verify-schemas Total: 64 resources | PASS: 0 | WARN: 38 | FAIL: 12 | SKIP: 14

FAIL 요약 (수정 필요)

#리소스문제 유형수정 방향
1blog (4개 리소스)SEO 필드명 불일치서버 or 클라이언트 통일
2collection (2개 리소스)SEO 필드명 불일치서버 or 클라이언트 통일
3customer.fieldConfig타입 불일치Zod 스키마 수정
4product.facetsoptions 구조 불일치서버 or 클라이언트 통일
5review.mediaFeed/Modalcount vs cursorZod 스키마 수정
6review.statsdistribution 타입Zod 스키마 수정
7action:checkout.create필드명 대량 불일치Zod 스키마 전면 수정

1. Blog SEO 필드명 불일치

영향 리소스: blog.blogs, blog.search, blog.blog, blog.detail

Zod (클라이언트)서버 (OpenAPI)수정 방향
seo.titleseo.metaTitle서버를 title로 변경 권장 (HCS 바인딩 간결)
seo.descriptionseo.metaDescription서버를 description으로 변경 권장
seo.canonicalseo.canonicalUrl서버를 canonical로 변경 권장

추가로 서버가 보내지만 Zod에 없는 필드:

  • blog 목록에서 contentUrl — BlogSchema (목록용)에 없음. BlogDetailSchema에만 있음 → 서버에서 목록 응답 시 contentUrl 제외하거나, BlogSchema에 optional 추가

2. Collection SEO 필드명 불일치

영향 리소스: collection.collection, collection.bySlug

Zod (클라이언트)서버 (OpenAPI)수정 방향
seo.titleseo.metaTitleBlog과 동일 — 서버를 title로 통일
seo.descriptionseo.metaDescription서버를 description으로 통일
seo.ogTitleZod에 추가
seo.ogDescriptionZod에 추가

3. customer.fieldConfig 타입 불일치

필드Zod서버수정 방향
marketsz.record(z.string(), ...) → 추출 시 stringMap<String, Object>objectZod 스키마를 z.record(z.string(), ShippingFieldConfigSchema)로 수정

4. product.facets — options 구조 불일치

서버는 ProductDiscoverySectionDto.optionsOptionDto (optionName, optionType, sortOrder, values)를 반환. 클라이언트는 ProductDiscoveryOptionSchema (value, label, count, selected)를 기대.

Zod (클라이언트)서버 (OpenAPI)설명
options[].value없음서버에 없는 필드
options[].label없음서버에 없는 필드
options[].count없음서버에 없는 필드
options[].selected없음서버에 없는 필드
없음options[].optionNameZod에 없는 필드
없음options[].optionTypeZod에 없는 필드
없음options[].sortOrderZod에 없는 필드
없음options[].valuesZod에 없는 필드

수정 방향: 서버 DTO가 HCS 친화적이지 않음. 서버에서 ProductDiscoverySectionDto{value, label, count, selected} 구조로 개선하거나, 클라이언트 스키마를 서버에 맞추기. 서버 개선 권장.


5. review.mediaFeed — count vs cursor

Zod (클라이언트)서버 (OpenAPI)수정 방향
count (number)없음Zod에서 제거
없음cursor (object)Zod에 cursor: CursorSchema 추가

추가로 배열 아이템에서 서버만 보내는 필드:

  • items[].productName, items[].storeItemName, items[].thumbnailUrl, items[].productPriceReviewSchema에 4개 필드 추가

6. review.stats — distribution 타입

필드Zod서버수정 방향
distributionz.record(z.string(), z.number()) → 추출 시 stringMap<Integer, Long>objectZod 타입 자체는 맞음. 검증 도구의 z.record() 추출 로직 개선 필요 (record를 object로 인식하도록)

7. action:checkout.create — 필드명 대량 불일치

Zod CheckoutResponseSchema (27 필드) vs 서버 CheckoutResponse (34 필드)

클라이언트에만 있는 필드 (서버에 없음 → 삭제)

필드수정
shippingMethod삭제
paymentMethodTypepaymentProcessor로 변경
processorType삭제 (paymentProcessor와 중복)
providerType삭제

서버에만 있는 필드 (Zod에 추가)

필드타입
appliedCouponsarray
couponDiscountAmountnumber
appliedPromotionsarray
promotionDiscountAmountnumber
appliedPointsnumber
pointsDiscountAmountnumber
rewardSummaryobject
deliveryMemostring
entranceMethodstring
paymentProcessorEnumDto
paymentMethodEnumDto

WARN 주요 항목 (참고)

서버에만 있는 필드 (Zod 추가 권장)

리소스누락 필드
product.products/searchreviewSummary, purchaseInfoSections, recommendationSections
review.reviewsproductName, storeItemName, thumbnailUrl, productPrice
cart.cartrewardSummary.availablePoints, rewardSummary.redeemUnit, rewardSummary.maximumRedeemPercent

nullable_mismatch (서버 @Schema 보강 필요)

대부분의 WARN은 서버 DTO에 @Schema(requiredMode = REQUIRED) 미지정으로 OpenAPI에서 모든 필드가 optional로 표시되는 문제. 서버에서 annotation 보강하면 노이즈 제거됨.


SKIP 14개 (z.any() 스키마)

리소스사유
checkout.detailz.any() (passthrough)
checkout.availableCouponsz.any()
order.listz.any()
order.detailz.any()
order.statusCountsz.any()
customer.statsz.any()
customer.membershipz.any()
customer.searchz.array(z.any())
blog.tagsarray response
기타OpenAPI path 매칭 실패

→ 실제 Zod 스키마를 정의하면 자동으로 검증 대상에 포함됨


수정 우선순위 제안

  1. checkout — HCS 체크아웃 플로우에 직접 영향. 필드명 전면 수정
  2. blog/collection SEO — 서버 필드명 통일 (meta prefix 제거)
  3. review — 누락 필드 추가 (productName 등)
  4. product.facets — 서버 DTO 구조 개선 (HCS 친화적으로)
  5. z.any() 스키마 정의 — checkout.detail, order 등