Files
pedidosClientes/app/api/routes/clientes.py
2025-12-05 11:27:16 -03:00

78 lines
2.3 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from prisma import Prisma
from typing import List
from app.models.cliente import ClienteCreate, ClienteUpdate, ClienteResponse
from app.api.dependencies import get_prisma
router = APIRouter(prefix="/clientes", tags=["clientes"])
@router.get("/", response_model=List[ClienteResponse])
async def listar_clientes(
skip: int = 0,
limit: int = 100,
db: Prisma = Depends(get_prisma)
):
"""Listar todos los clientes"""
clientes = await db.cliente.find_many(skip=skip, take=limit)
return clientes
@router.get("/{cliente_id}", response_model=ClienteResponse)
async def obtener_cliente(
cliente_id: int,
db: Prisma = Depends(get_prisma)
):
"""Obtener un cliente por ID"""
cliente = await db.cliente.find_unique(where={"id": cliente_id})
if not cliente:
raise HTTPException(status_code=404, detail="Cliente no encontrado")
return cliente
@router.post("/", response_model=ClienteResponse, status_code=201)
async def crear_cliente(
cliente: ClienteCreate,
db: Prisma = Depends(get_prisma)
):
"""Crear un nuevo cliente"""
try:
nuevo_cliente = await db.cliente.create(data=cliente.dict())
return nuevo_cliente
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@router.put("/{cliente_id}", response_model=ClienteResponse)
async def actualizar_cliente(
cliente_id: int,
cliente: ClienteUpdate,
db: Prisma = Depends(get_prisma)
):
"""Actualizar un cliente"""
cliente_existente = await db.cliente.find_unique(where={"id": cliente_id})
if not cliente_existente:
raise HTTPException(status_code=404, detail="Cliente no encontrado")
data = {k: v for k, v in cliente.dict().items() if v is not None}
cliente_actualizado = await db.cliente.update(
where={"id": cliente_id},
data=data
)
return cliente_actualizado
@router.delete("/{cliente_id}", status_code=204)
async def eliminar_cliente(
cliente_id: int,
db: Prisma = Depends(get_prisma)
):
"""Eliminar un cliente"""
cliente = await db.cliente.find_unique(where={"id": cliente_id})
if not cliente:
raise HTTPException(status_code=404, detail="Cliente no encontrado")
await db.cliente.delete(where={"id": cliente_id})
return None