| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from fastapi import APIRouter, Depends, HTTPException
- from sqlalchemy import delete, select
- from sqlalchemy.orm import Session
- from app.api import deps
- from app.core.security import get_password_hash
- from app.models import User
- from app.schemas.requests import UserCreateRequest, UserUpdatePasswordRequest
- from app.schemas.responses import UserResponse
- router = APIRouter()
- @router.get("", response_model=list[UserResponse])
- async def list_users(
- current_user: User = Depends(deps.get_current_user),
- session: Session = Depends(deps.get_session),
- ):
- """Returns the list of users from the application"""
- return session.execute(select(User)).scalars().all()
- @router.get("/me", response_model=UserResponse)
- async def read_current_user(
- current_user: User = Depends(deps.get_current_user),
- ):
- """Get current user"""
- return current_user
- @router.delete("/me", status_code=204)
- async def delete_current_user(
- current_user: User = Depends(deps.get_current_user),
- session: Session = Depends(deps.get_session),
- ):
- """Delete current user"""
- session.execute(delete(User).where(User.id == current_user.id))
- session.commit()
- @router.post("/update-password", response_model=UserResponse)
- async def reset_current_user_password(
- user_update_password: UserUpdatePasswordRequest,
- session: Session = Depends(deps.get_session),
- current_user: User = Depends(deps.get_current_user),
- ):
- """Update current user password"""
- current_user.hashed_password = get_password_hash(user_update_password.password)
- session.add(current_user)
- session.commit()
- return current_user
- @router.post("/register", response_model=UserResponse)
- async def register_new_user(
- new_user: UserCreateRequest,
- session: Session = Depends(deps.get_session),
- ):
- """Create new user"""
- result = session.execute(select(User).where(User.email == new_user.email))
- if result.scalars().first() is not None:
- raise HTTPException(status_code=400, detail="Cannot use this email address")
- user = User(
- email=new_user.email,
- hashed_password=get_password_hash(new_user.password),
- )
- session.add(user)
- session.commit()
- return user
|