# 21 — API: contatti, showroom, consensi Leggi `CLAUDE.md`. ## Obiettivo Form pubblici e registro consensi GDPR. ## Cosa fare - `POST /contact` → salva `contact_requests`, email all'admin. Protezione anti-spam senza servizi terzi: honeypot + tempo minimo di compilazione + rate limit per IP. - `GET /showroom/slots` (slot disponibili da configurazione: giorni/orari di apertura, durata visita, capienza) e `POST /showroom/bookings` (verifica disponibilità, email di conferma). Admin: elenco e cambio stato prenotazioni. - Consensi: ogni form con dati personali richiede consenso privacy; consenso marketing/newsletter separato e facoltativo. Salvati in `consents` con versione del testo informativo e timestamp. - `GET /me/consents` e revoca consenso marketing. - `POST /me/delete-account` (richiesta cancellazione: disabilita l'account e notifica l'admin; la cancellazione effettiva resta manuale nell'MVP). ## Criteri di accettazione - Form senza consenso privacy → 400. - Due prenotazioni sullo stesso slot oltre la capienza → la seconda rifiutata. - Honeypot compilato → richiesta scartata silenziosamente (200, nulla salvato). - `CLAUDE.md` aggiornato.