25 lines
1.4 KiB
Markdown
25 lines
1.4 KiB
Markdown
# F-112 — Disclaimer de contenido asistido por IA
|
|
|
|
## Backend
|
|
- **Migración 040** (`040_product_ai_assisted.js`): `catalog_products.ai_assisted boolean NOT NULL DEFAULT false` + índice parcial. Aplicada (`db:status`).
|
|
- **Dominio** (`product.ts`): `Product.aiAssisted: boolean`, `NewProduct.aiAssisted?: boolean`.
|
|
- **Repositorio** (`pg-product-repository.ts`): columna en `ProductRow`, mapeo en `toProduct`, `UPDATABLE` permite editar, INSERT incluye `ai_assisted`.
|
|
- **Rutas** (`catalog.routes.ts`):
|
|
- `newProductSchema` admite `aiAssisted`.
|
|
- `serializeProduct` expone `aiAssisted`.
|
|
- `POST /products/:id/generate-seo`: si la IA generó al menos un campo, fuerza `aiAssisted = true` en el patch.
|
|
|
|
## Frontend (apps/frontend)
|
|
- `types/api.ts`: `Product.aiAssisted?: boolean`.
|
|
- `app/products/[slug]/page.tsx`: cuando `product.aiAssisted === true`, renderiza un `<aside>` con los dos avisos requeridos.
|
|
|
|
## Tests
|
|
- `product-use-cases.test.ts` + `image-use-cases.test.ts`: actualizados para incluir `aiAssisted: false` en fixtures.
|
|
- `npm run typecheck` (backend) OK.
|
|
- `npm test`: 169 passed / 0 failed.
|
|
- `apps/frontend tsc --noEmit` OK.
|
|
|
|
## Evidencia
|
|
- DB: `SELECT column_name FROM information_schema.columns WHERE table_name='catalog_products' AND column_name='ai_assisted'` → presente.
|
|
- Smoke: `UPDATE catalog_products SET ai_assisted = true WHERE id = '<sample>'` → la ficha de cliente muestra el aviso.
|