Files
iti-technology/prompts/10-api-schema-dominio.md
T
Lorenzo SanesiandClaude Opus 5.5 b83ce039fb
Deploy stack su Proxmox / deploy (push) Failing after 3s
Piattaforma ITI TECHNOLOGY: monorepo, Medusa, API, sito, area riservata e deploy
Monorepo npm con apps/public (Angular SSR), apps/private (Angular SPA),
apps/api (Fastify), packages/shared e packages/styles; Medusa 2.21 in medusa/;
infrastruttura Docker (Postgres PostGIS+pgvector, Redis, Caddy, backup) e
workflow Gitea Actions per il deploy via SSH a ogni push su master.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jQyT6dR9czzGwqb7FkG6u
2026-10-20 09:30:48 +02:00

23 lines
1.9 KiB
Markdown

# 10 — API: schema di dominio
Leggi `CLAUDE.md`.
## Obiettivo
Tabelle di dominio dell'MVP (solo schema + migrazioni, niente route).
## Cosa fare
- `installer_profiles`: user_id PK/FK, business_name, vat_number, phone, address, `location geography(Point,4326)`, `service_radius_km`, certifications text[], status (`pending|approved|rejected`), approved_at, notes. Indice GIST su location. (Drizzle: custom type per geography.)
- `quote_requests`: id, user_id null (anche anonimi), email, name, phone, province, configurator_input jsonb, configurator_output jsonb, status (`new|contacted|converted|closed`), created_at.
- `quotes`: id, quote_request_id null FK, user_id FK, number (progressivo leggibile), title, status (`draft|sent|accepted|rejected|expired`), amount_cents, pdf_document_id null, valid_until, created_at.
- `tickets` + `ticket_messages`: ticket con user_id, subject, status (`open|in_progress|waiting_customer|closed`), priority; messaggi con author_id, body, created_at.
- `blog_categories`, `blog_posts`: slug unique, title, excerpt, content_md, cover_path, status (`draft|published`), published_at, seo_title, seo_description, `search_vector tsvector` generata (configurazione `italian`, con `unaccent`) + indice GIN.
- `documents`: id, title, category, file_path, mime_type, size_bytes, visibility (`public|customer|installer|admin`), product_ref null, created_at.
- `contact_requests`, `showroom_bookings` (data/ora richiesta, stato), `consents` (user_id o email, tipo, versione testo, accepted_at, ip).
- `webhook_events`: id (id evento Medusa, PK per idempotenza), event, payload jsonb, processed_at, error.
## Criteri di accettazione
- Migrazione applicata senza errori; indici GIST e GIN presenti.
- Una query di prova su `blog_posts.search_vector` con `websearch_to_tsquery('italian', ...)` funziona.
- I tipi delle tabelle sono esportati da `apps/api` (e i DTO pubblici in `packages/shared`).
- `CLAUDE.md` aggiornato (ERD testuale sintetico).