Files
app_faturas/app/routes/clientes.py

73 lines
2.2 KiB
Python
Raw Permalink Normal View History

2025-08-09 19:51:14 -03:00
# app/routes/clientes.py
from fastapi import APIRouter, Request, Depends, HTTPException, Query
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, or_
from app.database import get_session
from app.models import Cliente
from pydantic import BaseModel
from uuid import UUID
import uuid
from fastapi.responses import HTMLResponse
router = APIRouter()
@router.get("/clientes")
async def clientes_page(request: Request):
return request.app.state.templates.TemplateResponse("clientes.html", {"request": request})
class ClienteIn(BaseModel):
nome_fantasia: str
cnpj: str | None = None
ativo: bool = True
@router.get("/api/clientes")
async def listar(
busca: str = Query(default="", description="Filtro por nome ou CNPJ"),
session: AsyncSession = Depends(get_session),
):
stmt = select(Cliente).order_by(Cliente.nome_fantasia)
if busca:
pattern = f"%{busca}%"
stmt = select(Cliente).where(
or_(
Cliente.nome_fantasia.ilike(pattern),
Cliente.cnpj.ilike(pattern),
)
).order_by(Cliente.nome_fantasia)
res = await session.execute(stmt)
clientes = res.scalars().all()
return [
{
"id": str(c.id),
"nome_fantasia": c.nome_fantasia,
"cnpj": c.cnpj,
"ativo": c.ativo,
}
for c in clientes
]
@router.post("/api/clientes")
async def criar_cliente(body: ClienteIn, session: AsyncSession = Depends(get_session)):
cliente = Cliente(**body.dict())
session.add(cliente)
await session.commit()
return {"id": str(cliente.id)}
@router.put("/api/clientes/{id}")
async def editar_cliente(id: UUID, body: ClienteIn, session: AsyncSession = Depends(get_session)):
await session.execute(
Cliente.__table__.update().where(Cliente.id == id).values(**body.dict())
)
await session.commit()
return {"ok": True}
@router.delete("/api/clientes/{id}")
async def excluir(id: uuid.UUID, session: AsyncSession = Depends(get_session)):
obj = await session.get(Cliente, id)
if not obj:
raise HTTPException(404, "Cliente não encontrado")
await session.delete(obj)
await session.commit()
return {"ok": True}