from typing import Any from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app import crud from app.api import deps from app.models.user import User from app.schemas.user import User as UserSchema from app.schemas.user import UserUpdate router = APIRouter() @router.get("/", response_model=list[UserSchema]) def read_users( db: Session = Depends(deps.get_db), skip: int = 0, limit: int = 100, current_user: User = Depends(deps.get_current_active_user), ) -> Any: """ Retrieve users. """ users = db.query(User).offset(skip).limit(limit).all() return users @router.get("/{user_id}", response_model=UserSchema) def read_user( user_id: int, current_user: User = Depends(deps.get_current_active_user), db: Session = Depends(deps.get_db), ) -> Any: """ Get a specific user by id. """ user = crud.get(db, user_id=user_id) if user == current_user: return user if not user: raise HTTPException( status_code=404, detail="The user with this id does not exist", ) return user @router.put("/me", response_model=UserSchema) def update_user_me( *, db: Session = Depends(deps.get_db), user_in: UserUpdate, current_user: User = Depends(deps.get_current_active_user), ) -> Any: """ Update own user. """ user = crud.update(db, db_obj=current_user, obj_in=user_in) return user @router.get("/me", response_model=UserSchema) def read_user_me( db: Session = Depends(deps.get_db), current_user: User = Depends(deps.get_current_active_user), ) -> Any: """ Get current user. """ return current_user