users.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from fastapi import APIRouter, Depends, HTTPException
  2. from sqlalchemy import delete, select
  3. from sqlalchemy.orm import Session
  4. from app.api import deps
  5. from app.core.security import get_password_hash
  6. from app.models import User
  7. from app.schemas.requests import UserCreateRequest, UserUpdatePasswordRequest
  8. from app.schemas.responses import UserResponse
  9. router = APIRouter()
  10. @router.get("", response_model=list[UserResponse])
  11. async def list_users(
  12. current_user: User = Depends(deps.get_current_user),
  13. session: Session = Depends(deps.get_session),
  14. ):
  15. """Returns the list of users from the application"""
  16. return session.execute(select(User)).scalars().all()
  17. @router.get("/me", response_model=UserResponse)
  18. async def read_current_user(
  19. current_user: User = Depends(deps.get_current_user),
  20. ):
  21. """Get current user"""
  22. return current_user
  23. @router.delete("/me", status_code=204)
  24. async def delete_current_user(
  25. current_user: User = Depends(deps.get_current_user),
  26. session: Session = Depends(deps.get_session),
  27. ):
  28. """Delete current user"""
  29. session.execute(delete(User).where(User.id == current_user.id))
  30. session.commit()
  31. @router.post("/reset-password", response_model=UserResponse)
  32. async def reset_current_user_password(
  33. user_update_password: UserUpdatePasswordRequest,
  34. session: Session = Depends(deps.get_session),
  35. current_user: User = Depends(deps.get_current_user),
  36. ):
  37. """Update current user password"""
  38. current_user.hashed_password = get_password_hash(user_update_password.password)
  39. session.add(current_user)
  40. session.commit()
  41. return current_user
  42. @router.post("/register", response_model=UserResponse)
  43. async def register_new_user(
  44. new_user: UserCreateRequest,
  45. session: Session = Depends(deps.get_session),
  46. ):
  47. """Create new user"""
  48. result = session.execute(select(User).where(User.email == new_user.email))
  49. if result.scalars().first() is not None:
  50. raise HTTPException(status_code=400, detail="Cannot use this email address")
  51. user = User(
  52. email=new_user.email,
  53. hashed_password=get_password_hash(new_user.password),
  54. )
  55. session.add(user)
  56. session.commit()
  57. return user