Creación y Suscripción de Planes y Clientes en FastAPI
Clase 15 de 23 • Curso de FastAPI
Resumen
¿Deseas aprender cómo crear y administrar planes utilizando FastAPI así como gestionar suscripciones? Aprende a crear endpoints personalizados para manejar tus propias suscripciones y planes, empleando eficientemente modelos de datos y relaciones en la base de datos.
¿Cómo crear un endpoint para nuevos planes en FastAPI?
Crear un endpoint para gestionar planes en FastAPI implica definir claramente tus rutas y modelos. Sigue estos pasos clave:
- Crea un archivo propio, como
plans.py
, dentro de tu carpeta de routers. - Importa
APIRouter
desdeFastAPI
y define las rutas claramente para la creación de nuevos planes.
from fastapi import APIRouter
from models import Plan
from db import session
router = APIRouter()
@router.post('/plans')
def create_plan(plan_data: Plan):
plan_db = Plan.model_validate(plan_data.model_dump())
session.add(plan_db)
session.commit()
session.refresh(plan_db)
return plan_db
Asegura validar la información usando los métodos propios del modelo antes de guardar cualquier dato.
¿Cómo resolver errores relacionados con cambios en el modelo de base de datos?
Si aprecias errores en la integración de cambios que hiciste en modelos, generalmente significa que debes regenerar tus tablas. Puedes verificar tu base de datos fácilmente:
- Consulta directamente tu DB para validar si tus tablas coinciden con tu modelo.
- Si necesitas un ajuste inmediato, puedes borrar y regenerar la tabla, aunque idealmente implementa migraciones para mantener coherencia al largo plazo.
Recuerda, por ejemplo, puedes comprobar tu esquema así:
sqlite3 nombre_base.db
.schema nombre_tabla
Al volver a generar tus tablas, lograrás alinear tus modelos correctamente y resolver errores rápidamente.
¿Cómo crear suscripciones de clientes a planes específicos?
Empieza creando un nuevo endpoint en tu ruta para relacionar clientes con los planes deseados:
@router.post('/customers/{customer_id}/plans/{plan_id}')
async def subscribe_customer_to_plan(customer_id: int, plan_id: int):
customer_db = session.get(Customer, customer_id)
plan_db = session.get(Plan, plan_id)
if not customer_db or not plan_db:
raise HTTPException(status_code=404, detail="El customer o plan no existe")
customer_plan_db = CustomerPlan(plan_id=plan_db.id, customer_id=customer_db.id)
session.add(customer_plan_db)
session.commit()
session.refresh(customer_db)
return customer_plan_db
Verifica al instante si tus endpoints funcionan mediante herramientas visuales como Swagger UI, ya integrado por defecto en FastAPI.
¿Cómo visualizar las suscripciones activas de un cliente?
Crear un endpoint que visualice las suscripciones activas del cliente te permite administrar con claridad estas relaciones.
@router.get('/customers/{customer_id}/plans')
def list_customer_plans(customer_id: int):
customer_db = session.get(Customer, customer_id)
if not customer_db:
raise HTTPException(status_code=404, detail="El customer no existe")
return customer_db.plans
Ten en cuenta cómo, en tan pocos pasos, puedes gestionar fácilmente la información indispensable de tus clientes y planes.
¿Te animas con un reto adicional?
Ahora que conoces el camino, intenta crear un nuevo campo llamado "estado" en tu tabla intermedia (customer plan
). Luego, ajusta el endpoint para filtrar y visualizar únicamente suscripciones activas. ¿Listo para intentarlo? ¡Comparte tu experiencia en los comentarios!