48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
|
|
from .. import crud
|
|
from ..database import get_db
|
|
from ..models import Customer
|
|
from ..pagination import Page, PageParams
|
|
from ..schemas import CustomerCreate, CustomerOut, CustomerUpdate
|
|
|
|
router = APIRouter(prefix="/customers", tags=["customers"])
|
|
|
|
|
|
@router.get("", response_model=Page[CustomerOut])
|
|
def list_customers(
|
|
page: PageParams = Depends(),
|
|
username: str | None = None,
|
|
mac_address: str | None = None,
|
|
status: str | None = None,
|
|
db: Session = Depends(get_db),
|
|
):
|
|
filters = {"username": username, "mac_address": mac_address, "status": status}
|
|
total = crud.count_rows(db, Customer, filters)
|
|
rows = crud.list_rows(db, Customer, limit=page.limit, offset=page.offset, filters=filters,
|
|
order_by=Customer.id.desc())
|
|
return Page(total=total, limit=page.limit, offset=page.offset, items=rows)
|
|
|
|
|
|
@router.get("/{customer_id}", response_model=CustomerOut)
|
|
def get_customer(customer_id: int, db: Session = Depends(get_db)):
|
|
return crud.get_row_or_404(db, Customer, customer_id)
|
|
|
|
|
|
@router.post("", response_model=CustomerOut, status_code=201)
|
|
def create_customer(payload: CustomerCreate, db: Session = Depends(get_db)):
|
|
return crud.create_row(db, Customer, payload.model_dump())
|
|
|
|
|
|
@router.put("/{customer_id}", response_model=CustomerOut)
|
|
def update_customer(customer_id: int, payload: CustomerUpdate, db: Session = Depends(get_db)):
|
|
obj = crud.get_row_or_404(db, Customer, customer_id)
|
|
return crud.update_row(db, obj, payload.model_dump(exclude_unset=True))
|
|
|
|
|
|
@router.delete("/{customer_id}", status_code=204)
|
|
def delete_customer(customer_id: int, db: Session = Depends(get_db)):
|
|
obj = crud.get_row_or_404(db, Customer, customer_id)
|
|
crud.delete_row(db, obj)
|