1.6 KiB
1.6 KiB
catalog Specification
Purpose
TBD - created by archiving change catalog-i18n-currency. Update Purpose after archive.
Requirements
Requirement: Localized product content
Product and category names/descriptions SHALL be stored as JSONB maps keyed by locale (en, zh). The API MUST return the full map; clients pick the display locale.
Scenario: bilingual round-trip
- WHEN a shop owner creates a product with name
{"en": "Mug", "zh": "马克杯"} - THEN both public detail and shop-admin GET return the identical map
Requirement: Publish lifecycle
Products SHALL have status draft | published | unpublished. Only published products appear in public list/detail.
Scenario: publish then unpublish
- WHEN a product is published
- THEN it appears in
GET /api/products - WHEN it is unpublished
- THEN public detail returns 404 and it disappears from listings
Scenario: publish requires sellable SKU
- WHEN publishing a product with no active SKU having price > 0
- THEN the API returns 400
Requirement: Shop isolation
Shop-role users SHALL only see and mutate their own shop's products under /api/shop/products.
Scenario: cross-shop access denied
- WHEN shop owner A requests
/api/shop/products/{id}of shop B - THEN the API returns 404
Requirement: SKU pricing
Each SKU SHALL carry price_minor (integer minor units) and an ISO currency code; stock is a non-negative integer.
Scenario: negative stock rejected
- WHEN upserting a SKU with stock < 0
- THEN the API returns 400