22 lines
1.6 KiB
Markdown
22 lines
1.6 KiB
Markdown
# F-138 — Documentation (API contract)
|
|
|
|
## Resumen del cambio de comportamiento
|
|
**No hay nuevas rutas ni parámetros públicos.** F-138 corrige una brecha de integridad de datos: al crear una variante de producto, **ahora se inserta inmediatamente una fila en `pricing_variant_prices` con valores por defecto** (`net_unit_amount_cents=0`, `vat_rate='general'`, `currency='EUR'` por defecto de DDL).
|
|
|
|
## Impacto en la API
|
|
- `POST /products` → autovariante `SKU-MV-{id}`: la variante ya creada pasa a tener fila de precio (antes 404 hasta asociar precio).
|
|
- `GET /products/:id/variants` (lazy, admin): si crea la variante default, también se sembrará su precio.
|
|
- `POST /products/:id/variants`: la variante creada pasa a tener fila de precio.
|
|
- `GET /pricing/variants/:variantId`: deja de devolver 404 inmediatamente después de crear una variante (antes devolvía 404 hasta que un admin asociara un precio).
|
|
|
|
## Idempotencia
|
|
El sembrado usa `INSERT ... ON CONFLICT (variant_id) DO NOTHING`, por lo que es re-sembrable sin efecto ni errores (AC2). Mantiene la invariante: **toda variante creada tiene al menos una fila de precio**.
|
|
|
|
## Best-effort
|
|
El sembrado es best-effort dentro de `CreateProductVariant.execute`: si falla (p.ej. error transitorio de BD), la creación de la variante primaria **no** se revierte ni falla. El `variant_id` es UNIQUE/PK por definición de la tabla, por lo que el seed no introduce duplicados.
|
|
|
|
## Seguridad
|
|
- SQL parameterizado (`$1` con el UUID de la variante).
|
|
- Valores por defecto son constantes de código, no input de usuario.
|
|
- No hay nueva ruta ni query parameter.
|