import type { APIRoute } from 'astro'; import { apriFascicolo } from '../../../../lib/longevity/anagrafica'; export const prerender = false; // Riservato a admin+trainer da src/lib/auth.ts (RULES, /^\/api\/longevity\/gestionale(\/|$)/): // il middleware nega prima che questo file veda la richiesta. const REGEX_DATA = /^\d{4}-\d{2}-\d{2}$/; const redirect = (location: string) => new Response(null, { status: 303, headers: { Location: location } }); /** Sempre la stessa pagina di partenza: questo endpoint ha un solo modulo che lo chiama * (pages/longevity/gestionale/nuovo.astro, unità 2b), quindi il ritorno in caso di errore * non serve dedurlo da un Referer — si scrive qui, una volta. */ const erroreAlModulo = (testo: string) => redirect(`/longevity/gestionale/nuovo?errore=${encodeURIComponent(testo)}`); function isSesso(v: string): v is 'M' | 'F' { return v === 'M' || v === 'F'; } export const POST: APIRoute = async ({ request }) => { const form = await request.formData(); const leggi = (chiave: string) => String(form.get(chiave) ?? '').trim(); const nome = leggi('nome'); const cognome = leggi('cognome'); const sesso = leggi('sesso'); const dataNascita = leggi('data_nascita'); const email = leggi('email'); const telefono = leggi('telefono'); if (!nome) return erroreAlModulo('Il nome è obbligatorio.'); if (!cognome) return erroreAlModulo('Il cognome è obbligatorio.'); if (!isSesso(sesso)) return erroreAlModulo('Il sesso deve essere M o F.'); if (dataNascita) { if (!REGEX_DATA.test(dataNascita)) { return erroreAlModulo('Data di nascita non valida (formato AAAA-MM-GG).'); } // La data del server, non quella (manomettibile) del form: stesso criterio di // pages/api/longevity/questionario.ts per "oggi". const oggi = new Date().toISOString().slice(0, 10); if (dataNascita > oggi) return erroreAlModulo('La data di nascita non può essere nel futuro.'); } const code = apriFascicolo({ nome, cognome, sesso, data_nascita: dataNascita || undefined, email: email || undefined, telefono: telefono || undefined, }); return redirect(`/longevity/gestionale/cliente/${code}`); };