Endpoints CRUD en FastAPI con Pydantic v2, Alembic y tests con pytest

Genera un módulo FastAPI completo para un recurso: esquemas Pydantic v2, modelo y migración Alembic, router CRUD paginado y tests con pytest y httpx. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 5 variables personalizables y se copia gratis en un clic.

Intermedio · Código · Pendiente de revisión editorial

Prompt

Actúa como desarrollador backend senior especializado en Python, FastAPI y SQLAlchemy.

Quiero añadir a una API FastAPI existente un módulo completo para gestionar {{recurso}}.
- Campos y tipos: {{campos}}
- Reglas de negocio: {{reglas}}
- Base de datos: {{base_datos}}
- Acceso a datos: {{acceso}}

Entregables, en este orden:
1. Estructura de archivos (router, esquemas, modelo, servicio o repositorio, tests) y una frase que justifique la separación.
2. Esquemas Pydantic v2 separados para crear, actualizar parcialmente y responder, con validaciones (`Field`, `field_validator`, `model_validator`) que apliquen las reglas de negocio.
3. Modelo de base de datos y la migración Alembic correspondiente, con índices y restricciones de unicidad donde tengan sentido.
4. Router con listado paginado y filtrable, detalle, creación, actualización parcial (PATCH) y borrado. Usa los códigos correctos (201, 204, 404, 409, 422) y `response_model` en todos los endpoints.
5. Sesión de base de datos inyectada con `Depends`, sin estado global, y transacciones bien delimitadas.
6. Tests con pytest y `httpx.AsyncClient` (o `TestClient` si el acceso es síncrono): caso feliz, validación, recurso inexistente y conflicto con las reglas de negocio, sobre una base de datos de test aislada.
7. Comandos para arrancar la app, aplicar la migración y ejecutar los tests.

Restricciones:
- Python 3.11 o superior, todo tipado, sin dependencias innecesarias.
- No inventes campos ni reglas: si algo es ambiguo, pregúntame antes de escribir código o márcalo como [COMPLETAR].
- Indica qué decisiones dependen de cómo está montado el resto de mi proyecto (autenticación, configuración, nombres de tablas).

Formato: un bloque de código por archivo con su ruta como título y, al final, una lista de supuestos.

Cómo usarlo

  1. Describe el recurso con sus campos reales y las reglas que hoy aplicas a mano.
  2. Elige tu base de datos y si usas SQLAlchemy asíncrono, síncrono o SQLModel.
  3. Copia los archivos, genera la migración y ejecuta pytest antes de integrarlo.
  4. Si tu proyecto ya tiene convenciones de carpetas, pégalas para que el código las respete.

Ejemplo de uso

Recurso: reservas de mesa · Campos: cliente, fecha y hora, comensales · Regla: máximo 40 comensales por franja · PostgreSQL con SQLAlchemy asíncrono.

Resultado de ejemplo

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):
    pendiente = "pendiente"
    confirmada = "confirmada"
    cancelada = "cancelada"

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

    @field_validator("fecha_hora")
    @classmethod
    def dentro_de_ventana(cls, v: datetime) -> datetime:
        if v.tzinfo is None:
            raise ValueError("la fecha debe incluir zona horaria")
        ahora = datetime.now(timezone.utc)
        if v < ahora or v > ahora + timedelta(days=60):
            raise ValueError("solo se admiten reservas entre hoy y 60 días")
        return v

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

El límite de 40 comensales por franja de 30 minutos necesita consultar la base de datos, así que no va en el esquema: el servicio suma los comensales de la franja dentro de la misma transacción y responde 409 si se supera.

Supuestos

  • Las franjas empiezan en :00 y :30 → [COMPLETAR] si tu restaurante usa otro criterio.
  • El formato del teléfono es orientativo…

Datos clave

Categoría
Programación y desarrollo · Python
Tipo de resultado
Código
Nivel
Intermedio
Pensado para
ChatGPT, Claude, Gemini y Microsoft Copilot
Verificado en
Pendiente de verificación editorial
Variables
Recurso, Campos y tipos, Reglas de negocio, Base de datos y Acceso a datos
Idioma
Español
Precio
Gratis, sin registro
Actualizado
07/11/2026

Preguntas frecuentes

¿Por qué tres esquemas Pydantic distintos para el mismo recurso?

Porque crear, actualizar y responder exigen campos diferentes: en PATCH todo es opcional y la respuesta incluye id y fechas. Separarlos evita exponer campos internos y validaciones incoherentes.

¿Dónde deben ir las reglas de negocio, en el esquema o en el servicio?

Las validaciones de formato y rango van en Pydantic. Las que necesitan consultar la base de datos, como el aforo de una franja, van en el servicio y devuelven 409 si hay conflicto.

¿Sirve para FastAPI con SQLModel?

Sí. Elige SQLModel en la variable de acceso a datos y el prompt adaptará modelos y esquemas, aunque seguirá separando entrada y salida.

¿Para qué sirve este prompt?

Genera un módulo FastAPI completo para un recurso: esquemas Pydantic v2, modelo y migración Alembic, router CRUD paginado y tests con pytest y httpx.

¿Con qué herramientas de IA funciona?

Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.

¿Cómo personalizo el prompt?

Pulsa «Personalizar» y rellena las variables (Recurso, Campos y tipos, Reglas de negocio, Base de datos y Acceso a datos). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.

¿Necesito experiencia para usarlo?

Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.

¿Este prompt es gratis?

Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.

¿Puedo fiarme del resultado de la IA?

Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.

Prompts relacionados