users.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from fastapi import APIRouter, Depends, HTTPException
  2. from sqlalchemy import delete, select
  3. from sqlalchemy.ext.asyncio import AsyncSession
  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("/me", response_model=UserResponse)
  11. async def read_current_user(
  12. current_user: User = Depends(deps.get_current_user),
  13. ):
  14. """Get current user"""
  15. return current_user
  16. @router.delete("/me", status_code=204)
  17. async def delete_current_user(
  18. current_user: User = Depends(deps.get_current_user),
  19. session: AsyncSession = Depends(deps.get_session),
  20. ):
  21. """Delete current user"""
  22. await session.execute(delete(User).where(User.id == current_user.id))
  23. await session.commit()
  24. @router.post("/reset-password", response_model=UserResponse)
  25. async def reset_current_user_password(
  26. user_update_password: UserUpdatePasswordRequest,
  27. session: AsyncSession = Depends(deps.get_session),
  28. current_user: User = Depends(deps.get_current_user),
  29. ):
  30. """Update current user password"""
  31. current_user.hashed_password = get_password_hash(user_update_password.password)
  32. session.add(current_user)
  33. await session.commit()
  34. return current_user
  35. @router.post("/register", response_model=UserResponse)
  36. async def register_new_user(
  37. new_user: UserCreateRequest,
  38. session: AsyncSession = Depends(deps.get_session),
  39. ):
  40. """Create new user"""
  41. result = await session.execute(select(User).where(User.email == new_user.email))
  42. if result.scalars().first() is not None:
  43. raise HTTPException(status_code=400, detail="Cannot use this email address")
  44. user = User(
  45. email=new_user.email,
  46. hashed_password=get_password_hash(new_user.password),
  47. )
  48. session.add(user)
  49. await session.commit()
  50. return user