Endpoint CRUD in FastAPI con Pydantic v2, Alembic e test pytest

Genera un modulo FastAPI completo per una risorsa: schemi Pydantic v2, modello e migrazione Alembic, router CRUD paginato e test pytest con httpx. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 5 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.

Intermedio · Codice · In attesa di revisione editoriale

Prompt

Agisci come sviluppatore backend senior specializzato in Python, FastAPI e SQLAlchemy.

Voglio aggiungere a un’API FastAPI esistente un modulo completo per gestire {{risorsa}}.
- Campi e tipi: {{campi}}
- Regole di business: {{regole}}
- Database: {{database}}
- Accesso ai dati: {{accesso}}

Consegna, in quest’ordine:
1. La struttura dei file (router, schemi, modello, service o repository, test) con una frase che giustifichi la suddivisione.
2. Schemi Pydantic v2 separati per creazione, aggiornamento parziale e risposta, con validazioni (`Field`, `field_validator`, `model_validator`) che applichino le regole di business.
3. Il modello del database e la relativa migrazione Alembic, con indici e vincoli di unicità dove servono.
4. Un router con elenco paginato e filtrabile, dettaglio, creazione, aggiornamento parziale (PATCH) ed eliminazione. Usa i codici corretti (201, 204, 404, 409, 422) e un `response_model` su ogni endpoint.
5. La sessione del database iniettata con `Depends`, senza stato globale e con transazioni ben delimitate.
6. Test con pytest e `httpx.AsyncClient` (o `TestClient` se l’accesso è sincrono): caso felice, validazione, risorsa inesistente e conflitto con una regola di business, su un database di test isolato.
7. I comandi per avviare l’app, applicare la migrazione ed eseguire i test.

Vincoli:
- Python 3.11 o superiore, tutto tipizzato, nessuna dipendenza superflua.
- Non inventare campi né regole: se qualcosa è ambiguo, chiedimelo prima di scrivere codice o segnalo con [DA COMPLETARE].
- Indica quali decisioni dipendono dal resto del mio progetto (autenticazione, configurazione, nomi delle tabelle).

Formato: un blocco di codice per file con il percorso come titolo e, alla fine, l’elenco delle ipotesi.

Come usarlo

  1. Descrivi la risorsa con i campi reali e le regole che oggi controlli a mano.
  2. Scegli il database e la modalità di accesso (SQLAlchemy asincrono, sincrono o SQLModel).
  3. Copia i file, genera la migrazione ed esegui pytest prima di integrare.
  4. Se il progetto ha già convenzioni per le cartelle, incollale perché il codice le rispetti.

Esempio d'uso

Risorsa: prenotazioni dei tavoli · Campi: cliente, data e ora, coperti · Regola: massimo 40 coperti per fascia · PostgreSQL con SQLAlchemy asincrono.

Esempio di risultato

2. Schemi Pydantic v2 — app/prenotazioni/schemas.py

from datetime import datetime, timedelta, timezone
from enum import Enum
from pydantic import BaseModel, Field, field_validator

class StatoPrenotazione(str, Enum):
    in_attesa = "in_attesa"
    confermata = "confermata"
    annullata = "annullata"

class PrenotazioneCreate(BaseModel):
    nome_cliente: str = Field(min_length=1, max_length=120)
    telefono: str = Field(pattern=r"^\+?[0-9 ]{7,20}$")
    data_ora: datetime
    coperti: int = Field(ge=1, le=12)

    @field_validator("data_ora")
    @classmethod
    def nella_finestra(cls, v: datetime) -> datetime:
        if v.tzinfo is None:
            raise ValueError("la data deve includere il fuso orario")
        adesso = datetime.now(timezone.utc)
        if v < adesso or v > adesso + timedelta(days=60):
            raise ValueError("prenotazioni ammesse solo da oggi a 60 giorni")
        return v

class PrenotazioneUpdate(BaseModel):
    data_ora: datetime | None = None
    coperti: int | None = Field(default=None, ge=1, le=12)
    stato: StatoPrenotazione | None = None

Il limite di 40 coperti per fascia di 30 minuti richiede una query sul database, quindi non va nello schema: il servizio somma i coperti della fascia nella stessa transazione e risponde 409 se il limite viene superato.

Assunzioni

  • Le fasce iniziano a :00 e :30 → [DA COMPLETARE] se il ristorante usa un altro criterio.
  • Il formato del telefono è indicativo…

Dati chiave

Categoria
Programmazione e sviluppo · Python
Tipo di output
Codice
Livello
Intermedio
Pensato per
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificato in
In attesa di verifica editoriale
Variabili
Risorsa, Campi e tipi, Regole di business, Database e Accesso ai dati
Lingua
Italiano
Prezzo
Gratuito, senza registrazione
Aggiornato
07/11/2026

Domande frequenti

Perché tre schemi Pydantic per la stessa risorsa?

Creazione, aggiornamento e risposta richiedono campi diversi: nel PATCH tutto è opzionale e la risposta include id e date. Separarli evita di esporre campi interni.

Le regole di business vanno nello schema o nel service?

I controlli di formato e intervallo vanno in Pydantic. Quelle che richiedono una query, come la capienza di una fascia oraria, vanno nel service e restituiscono 409 in caso di conflitto.

Funziona anche con SQLModel?

Sì. Seleziona SQLModel nella variabile di accesso ai dati: il prompt adatta modelli e schemi mantenendo separati input e output.

A cosa serve questo prompt?

Genera un modulo FastAPI completo per una risorsa: schemi Pydantic v2, modello e migrazione Alembic, router CRUD paginato e test pytest con httpx.

Con quali strumenti di IA funziona?

È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.

Come personalizzo il prompt?

Clicca su «Personalizza» e compila le variabili (Risorsa, Campi e tipi, Regole di business, Database e Accesso ai dati). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.

Serve esperienza per usarlo?

È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.

Questo prompt è gratuito?

Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.

Posso fidarmi dell'output dell'IA?

Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.

Prompt correlati