Files
mercadodevida/work/artifacts/F-010/implementer.md
2026-08-17 22:23:10 +02:00

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.ts
  • project/src/modules/catalog/domain/errors.ts
  • project/src/modules/catalog/domain/ports.ts
  • project/src/modules/catalog/application/variant-use-cases.ts
  • project/src/modules/catalog/infrastructure/pg-variant-repository.ts
  • project/src/modules/catalog/infrastructure/pg-rich-data-repository.ts
  • project/src/modules/catalog/api/catalog.routes.ts
  • project/migrations/008_catalog_variants_rich_data.js
  • project/src/modules/catalog/tests/rich-data-use-cases.test.ts
  • project/src/app/tests/catalog.itest.ts
  • work/artifacts/F-010/architect.md
  • backlog/features.json
  • work/current.md

Acceptance traceability

  1. Duplicate SKU or EAN returns HTTP 409
    • Implemented via unique constraints on catalog_product_variants.sku and catalog_product_variants.ean.
    • Mapped to PRODUCT_VARIANT_CODE_EXISTS.
    • Covered by project/src/app/tests/catalog.itest.ts.
  2. Manual nutrition source blocks external overwrite
    • Implemented in protectManualNutrition inside application use-case logic.
    • Covered by project/src/modules/catalog/tests/rich-data-use-cases.test.ts and integration test scenario.
  3. Every nutrition payload stores provenance
    • API validation requires nutritionSource when nutrition is provided.
    • DB check enforces nutrition IS NULL OR nutrition_source IS NOT NULL.
    • Covered by integration test scenario.
  4. verify.sh green
    • Verified after implementation.

Commands run

  • cd project && npm run typecheck — PASS
  • cd project && npm run lint — PASS after Prettier normalization
  • cd project && npm test — PASS: 61 passed, 33 skipped (DB integration skipped without TEST_DATABASE_URL)
  • cd project && npm run build — PASS
  • cd 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.