from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from .. import crud from ..database import get_db from ..models import RadUserGroup from ..pagination import Page, PageParams from ..schemas import UserGroupCreate, UserGroupOut, UserGroupUpdate router = APIRouter(prefix="/radusergroup", tags=["radusergroup"]) @router.get("", response_model=Page[UserGroupOut]) def list_usergroups( page: PageParams = Depends(), username: str | None = None, groupname: str | None = None, db: Session = Depends(get_db), ): filters = {"username": username, "groupname": groupname} total = crud.count_rows(db, RadUserGroup, filters) rows = crud.list_rows(db, RadUserGroup, limit=page.limit, offset=page.offset, filters=filters, order_by=RadUserGroup.priority.asc()) return Page(total=total, limit=page.limit, offset=page.offset, items=rows) @router.get("/{item_id}", response_model=UserGroupOut) def get_usergroup(item_id: int, db: Session = Depends(get_db)): return crud.get_row_or_404(db, RadUserGroup, item_id) @router.post("", response_model=UserGroupOut, status_code=201) def create_usergroup(payload: UserGroupCreate, db: Session = Depends(get_db)): return crud.create_row(db, RadUserGroup, payload.model_dump()) @router.put("/{item_id}", response_model=UserGroupOut) def update_usergroup(item_id: int, payload: UserGroupUpdate, db: Session = Depends(get_db)): obj = crud.get_row_or_404(db, RadUserGroup, item_id) return crud.update_row(db, obj, payload.model_dump(exclude_unset=True)) @router.delete("/{item_id}", status_code=204) def delete_usergroup(item_id: int, db: Session = Depends(get_db)): obj = crud.get_row_or_404(db, RadUserGroup, item_id) crud.delete_row(db, obj)