2.5 KiB
2.5 KiB
Implementer — F-010 Variants, SKU/EAN and product rich data
done -> work/artifacts/F-010/implementer.md
Summary
Implemented catalog product variants and rich product data with SKU/EAN uniqueness, nutrition provenance, and manual nutrition overwrite protection.
Changed files
project/src/modules/catalog/domain/variant.tsproject/src/modules/catalog/domain/errors.tsproject/src/modules/catalog/domain/ports.tsproject/src/modules/catalog/application/variant-use-cases.tsproject/src/modules/catalog/infrastructure/pg-variant-repository.tsproject/src/modules/catalog/infrastructure/pg-rich-data-repository.tsproject/src/modules/catalog/api/catalog.routes.tsproject/migrations/008_catalog_variants_rich_data.jsproject/src/modules/catalog/tests/rich-data-use-cases.test.tsproject/src/app/tests/catalog.itest.tswork/artifacts/F-010/architect.mdbacklog/features.jsonwork/current.md
Acceptance traceability
- Duplicate SKU or EAN returns HTTP 409
- Implemented via unique constraints on
catalog_product_variants.skuandcatalog_product_variants.ean. - Mapped to
PRODUCT_VARIANT_CODE_EXISTS. - Covered by
project/src/app/tests/catalog.itest.ts.
- Implemented via unique constraints on
- Manual nutrition source blocks external overwrite
- Implemented in
protectManualNutritioninside application use-case logic. - Covered by
project/src/modules/catalog/tests/rich-data-use-cases.test.tsand integration test scenario.
- Implemented in
- Every nutrition payload stores provenance
- API validation requires
nutritionSourcewhennutritionis provided. - DB check enforces
nutrition IS NULL OR nutrition_source IS NOT NULL. - Covered by integration test scenario.
- API validation requires
verify.shgreen- Verified after implementation.
Commands run
cd project && npm run typecheck— PASScd project && npm run lint— PASS after Prettier normalizationcd project && npm test— PASS: 61 passed, 33 skipped (DB integration skipped withoutTEST_DATABASE_URL)cd project && npm run build— PASScd project && npm run lint:boundaries— PASS: 84 files checked./scripts/verify.sh— PASS
Notes
- No new npm dependencies.
- Variant and rich data mutations are admin-only via existing catalog route auth.
- No OpenFoodFacts sync job, images, stock, or pricing added.
- JSON payloads are bounded through Zod validation.
- Documentation stage should update README/API notes because new variant and rich data endpoints/error codes were added.