Noor2623's picture
Initial commit for Smart Query Routing System
d99646e
Raw
History Blame Contribute Delete
4.25 kB
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from app.dependencies import get_current_admin_user, get_db
from app.models.user import User
from app.schemas.admin import AdminDepartmentUpdate, AdminUserUpdate
from app.schemas.department import DepartmentCreate, DepartmentResponse
from app.schemas.user import UserRead
from app.services.admin_service import (
create_department,
deactivate_department,
deactivate_user,
get_department,
get_user,
list_departments,
list_users,
update_department,
update_user,
)
router = APIRouter(prefix="/admin", tags=["admin"])
def _raise_not_found(entity: str) -> None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"{entity} not found",
)
@router.get("/departments", response_model=list[DepartmentResponse])
def admin_list_departments(
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
return list_departments(db)
@router.post("/departments", response_model=DepartmentResponse, status_code=status.HTTP_201_CREATED)
def admin_create_department(
payload: DepartmentCreate,
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
try:
return create_department(db, **payload.model_dump())
except ValueError as exc:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
@router.put("/departments/{department_id}", response_model=DepartmentResponse)
def admin_update_department(
department_id: int,
payload: AdminDepartmentUpdate,
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
try:
department = update_department(db, department_id=department_id, payload=payload)
except ValueError as exc:
message = str(exc)
status_code = status.HTTP_404_NOT_FOUND if message == "Department not found" else status.HTTP_400_BAD_REQUEST
raise HTTPException(status_code=status_code, detail=message) from exc
return department
@router.delete("/departments/{department_id}", response_model=DepartmentResponse)
def admin_deactivate_department(
department_id: int,
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
try:
department = deactivate_department(db, department_id=department_id)
except ValueError as exc:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
return department
@router.get("/users", response_model=list[UserRead])
def admin_list_users(
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
return list_users(db)
@router.get("/users/{user_id}", response_model=UserRead)
def admin_get_user(
user_id: int,
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
user = get_user(db, user_id=user_id)
if user is None:
_raise_not_found("User")
return user
@router.put("/users/{user_id}", response_model=UserRead)
def admin_update_user(
user_id: int,
payload: AdminUserUpdate,
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
try:
user = update_user(db, user_id=user_id, payload=payload)
except ValueError as exc:
message = str(exc)
status_code = status.HTTP_404_NOT_FOUND if message == "User not found" else status.HTTP_400_BAD_REQUEST
raise HTTPException(status_code=status_code, detail=message) from exc
return user
@router.delete("/users/{user_id}", response_model=UserRead)
def admin_deactivate_user(
user_id: int,
db: Session = Depends(get_db),
current_admin: User = Depends(get_current_admin_user),
):
_ = current_admin
try:
user = deactivate_user(db, user_id=user_id)
except ValueError as exc:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
return user