Testys's picture
Fixed issue push
2ea4a10
"""
Router for managing users (staff, admins).
"""
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.concurrency import run_in_threadpool
from sqlalchemy.orm import Session
from typing import List
from src import crud, models
from src.database import get_db
from src.auth import get_current_active_user, get_current_active_admin_user_from_token
router = APIRouter(
prefix="/api/users",
tags=["Users"],
)
@router.post("/", response_model=models.UserResponse, status_code=status.HTTP_201_CREATED, dependencies=[Depends(get_current_active_admin_user_from_token)])
async def create_new_user(user: models.UserCreate, db: Session = Depends(get_db)):
"""
Admin: Create a new user (staff or admin).
"""
db_user = await run_in_threadpool(crud.get_user_by_username, db, user.username)
if db_user:
raise HTTPException(status_code=400, detail="Username already registered")
return await run_in_threadpool(crud.create_user, db, user)
@router.get("/", response_model=List[models.UserResponse], dependencies=[Depends(get_current_active_admin_user_from_token)])
async def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
"""
Admin: Retrieve a list of all users.
"""
users = await crud.get_all_users(db, skip=skip, limit=limit) # Assumes get_all_users exists in crud.users
return users
@router.get("/all", response_model=list[models.UserResponse], dependencies=[Depends(get_current_active_admin_user_from_token)])
async def get_all_users(db: Session = Depends(get_db)):
"""
Admin: Get a list of all users.
"""
users = await run_in_threadpool(crud.get_all_users, db)
return users
@router.get("/me", response_model=models.UserResponse)
async def read_users_me(current_user: models.User = Depends(get_current_active_user)):
"""
Get profile information for the currently authenticated user.
"""
return current_user