from fastapi import APIRouter, HTTPException, Request from models.user import User, UserChangePassword from lib.db import get_connection from lib.logger import logger router = APIRouter(prefix="/users", tags=["users"]) @router.get("/", response_model=list[User]) async def list_users(request: Request): logger.info(f"User list requested from {request.client.host}") with get_connection() as conn: users = conn.execute('SELECT * FROM "User"').fetchdf() # Convert DataFrame to dict users_dict = users.to_dict(orient="records") return users_dict @router.get("/{user_id}", response_model=User) async def get_user(user_id: int, request: Request): logger.debug( f"User details requested for user_id: {user_id} from {request.client.host}" ) with get_connection() as conn: user_df = conn.execute( 'SELECT * FROM "User" WHERE id = ?', (user_id,) ).fetchdf() if user_df.empty: logger.warning(f"Failed user lookup: user_id {user_id} not found") raise HTTPException(status_code=404, detail="User not found") user_data = user_df.to_dict(orient="records")[0] logger.debug(f"User details retrieved: {user_data}") return User(**user_data) @router.patch("/{user_id}") async def change_password(user_id: int, user: UserChangePassword, request: Request): logger.info( f"Password change attempt for user_id: {user_id} from {request.client.host}" ) # Implementation will go here when completed logger.warning(f"Password change not implemented for user_id: {user_id}") raise HTTPException(status_code=401, detail="Not implemented")