Endpoints CRUD em FastAPI com Pydantic v2, Alembic e testes pytest

Gere um módulo FastAPI completo para um recurso: esquemas Pydantic v2, modelo e migração Alembic, router CRUD paginado e testes pytest com httpx. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 5 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.

Intermédio · Código · Pendente de revisão editorial

Prompt

Atua como programador backend sénior especializado em Python, FastAPI e SQLAlchemy.

Quero acrescentar a uma API FastAPI existente um módulo completo para gerir {{recurso}}.
- Campos e tipos: {{campos}}
- Regras de negócio: {{regras}}
- Base de dados: {{base_dados}}
- Acesso a dados: {{acesso}}

Entregáveis, por esta ordem:
1. Estrutura de ficheiros (router, esquemas, modelo, serviço ou repositório, testes) com uma frase a justificar a divisão.
2. Esquemas Pydantic v2 separados para criar, atualizar parcialmente e responder, com validações (`Field`, `field_validator`, `model_validator`) que apliquem as regras de negócio.
3. O modelo da base de dados e a respetiva migração Alembic, com índices e restrições de unicidade onde fizer sentido.
4. Um router com listagem paginada e filtrável, detalhe, criação, atualização parcial (PATCH) e eliminação. Usa os códigos corretos (201, 204, 404, 409, 422) e `response_model` em todos os endpoints.
5. Sessão da base de dados injetada com `Depends`, sem estado global e com transações bem delimitadas.
6. Testes com pytest e `httpx.AsyncClient` (ou `TestClient` se o acesso for síncrono): caso feliz, validação, recurso inexistente e conflito com uma regra de negócio, numa base de dados de teste isolada.
7. Comandos para arrancar a aplicação, aplicar a migração e correr os testes.

Restrições:
- Python 3.11 ou superior, tudo tipado, sem dependências desnecessárias.
- Não inventes campos nem regras: se algo for ambíguo, pergunta-me antes de escrever código ou marca como [PREENCHER].
- Indica que decisões dependem do resto do meu projeto (autenticação, configuração, nomes das tabelas).

Formato: um bloco de código por ficheiro com o caminho como título e, no fim, uma lista de pressupostos.

Como utilizar

  1. Descreve o recurso com os campos reais e as regras que hoje verificas à mão.
  2. Escolhe a base de dados e o modo de acesso (SQLAlchemy assíncrono, síncrono ou SQLModel).
  3. Copia os ficheiros, gera a migração e corre pytest antes de integrar.
  4. Se o projeto já tem convenções de pastas, cola-as para o código as respeitar.

Exemplo de utilização

Recurso: reservas de mesa · Campos: cliente, data e hora, número de pessoas · Regra: máximo de 40 pessoas por intervalo · PostgreSQL com SQLAlchemy assíncrono.

Exemplo de resultado

2. Esquemas Pydantic v2 — app/reservas/schemas.py

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

class EstadoReserva(str, Enum):
    pendente = "pendente"
    confirmada = "confirmada"
    cancelada = "cancelada"

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

    @field_validator("data_hora")
    @classmethod
    def dentro_da_janela(cls, v: datetime) -> datetime:
        if v.tzinfo is None:
            raise ValueError("a data tem de incluir fuso horário")
        agora = datetime.now(timezone.utc)
        if v < agora or v > agora + timedelta(days=60):
            raise ValueError("só se aceitam reservas entre hoje e 60 dias")
        return v

class ReservaUpdate(BaseModel):
    data_hora: datetime | None = None
    pessoas: int | None = Field(default=None, ge=1, le=12)
    estado: EstadoReserva | None = None

Este limite de 40 pessoas por intervalo de 30 minutos precisa de consultar a base de dados, por isso não fica no esquema: o serviço soma as pessoas do intervalo na mesma transação e devolve 409 se o limite for ultrapassado.

Pressupostos

  • Os intervalos começam às :00 e às :30 → [COMPLETAR] se o restaurante funcionar de outra forma.
  • O formato do telemóvel é indicativo…

Dados-chave

Categoria
Programação e desenvolvimento · Python
Tipo de resultado
Código
Nível
Intermédio
Pensado para
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificado em
Pendente de verificação editorial
Variáveis
Recurso, Campos e tipos, Regras de negócio, Base de dados e Acesso a dados
Idioma
Português
Preço
Gratuito, sem registo
Atualizado
07/11/2026

Perguntas frequentes

Porquê três esquemas Pydantic para o mesmo recurso?

Criar, atualizar e responder exigem campos diferentes: no PATCH tudo é opcional e a resposta inclui id e datas. Separá-los evita expor campos internos.

As regras de negócio ficam no esquema ou no serviço?

As verificações de formato e intervalo ficam no Pydantic. As que precisam de consultar a base de dados, como a lotação de um intervalo, ficam no serviço e devolvem 409 em caso de conflito.

Funciona com SQLModel?

Sim. Escolhe SQLModel na variável de acesso a dados e o prompt adapta modelos e esquemas, mantendo entrada e saída separadas.

Para que serve este prompt?

Gere um módulo FastAPI completo para um recurso: esquemas Pydantic v2, modelo e migração Alembic, router CRUD paginado e testes pytest com httpx.

Com que ferramentas de IA funciona?

Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.

Como personalizo o prompt?

Clique em “Personalizar” e preencha as variáveis (Recurso, Campos e tipos, Regras de negócio, Base de dados e Acesso a dados). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.

Preciso de experiência para o utilizar?

É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.

Este prompt é gratuito?

Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.

Posso confiar no resultado da IA?

Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.

Prompts relacionados