from uuid import UUID from fastapi import APIRouter, HTTPException, Depends from fastapi_filter import FilterDepends from fastapi_pagination import Page from fastapi_pagination.ext.sqlmodel import paginate from payee.models import Payee, PayeeCreate, PayeeRead, PayeeUpdate, PayeeFilters from db import SessionDep from user.manager import get_current_user router = APIRouter() @router.post("") def create_payee(payee: PayeeCreate, session: SessionDep, current_user=Depends(get_current_user)) -> PayeeRead: result = Payee.create(payee, session) return Payee.get(session, result.id) @router.get("") def read_categories(session: SessionDep, filters: PayeeFilters = FilterDepends(PayeeFilters), current_user=Depends(get_current_user)) -> Page[PayeeRead]: return paginate(session, Payee.list(filters)) @router.get("/{payee_id}") def read_payee(payee_id: UUID, session: SessionDep, current_user=Depends(get_current_user)) -> PayeeRead: payee = Payee.get(session, payee_id) if not payee: raise HTTPException(status_code=404, detail="Payee not found") return payee @router.put("/{payee_id}") def update_payee(payee_id: UUID, payee: PayeeUpdate, session: SessionDep, current_user=Depends(get_current_user)) -> PayeeRead: db_payee = Payee.get(session, payee_id) if not db_payee: raise HTTPException(status_code=404, detail="Payee not found") payee_data = payee.model_dump(exclude_unset=True) payee = Payee.update(session, db_payee, payee_data) return payee @router.delete("/{payee_id}") def delete_payee(payee_id: UUID, session: SessionDep, current_user=Depends(get_current_user)): payee = Payee.get(session, payee_id) if not payee: raise HTTPException(status_code=404, detail="Payee not found") Payee.delete(session, payee) return {"ok": True}