Ved Gupta
getToken added
f1cd69e
from uuid import UUID
from fastapi import APIRouter, status, Depends, HTTPException
from sqlalchemy.orm import Session
from app.api.models.user import (
User,
UserResponse,
PasswordUpdate,
UserDeletedResponse,
User_GET_TOKEN,
Response_Token,
)
from app.core.database import get_db
from app.core.models.User import UserController
from app.utils import logger
router = APIRouter()
@router.post("/", status_code=status.HTTP_201_CREATED, response_model=UserResponse)
async def create_user(user: User, db: Session = Depends(get_db)):
try:
USER = UserController(db)
USER.create(
username=user.username,
email=user.email,
password=user.password,
)
return UserResponse.model_validate(USER.details())
except HTTPException as exc:
logger.error(exc)
raise exc
except Exception as exc:
logger.error(exc)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)
) from exc
@router.post(
"/get_token", status_code=status.HTTP_200_OK, response_model=Response_Token
)
async def get_user_token(user: User_GET_TOKEN, db: Session = Depends(get_db)):
try:
USER = UserController(db)
token = USER.read_token(user.email, user.password)
return {"token": token}
except HTTPException as exc:
logger.error(exc)
raise exc
except Exception as exc:
logger.error(exc)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)
) from exc
@router.get("/{user_id}/", status_code=status.HTTP_200_OK, response_model=UserResponse)
async def read_user(user_id: UUID, db: Session = Depends(get_db)):
try:
USER = UserController(db)
USER.read(user_id)
return UserResponse.model_validate(USER.details())
except HTTPException as exc:
logger.error(exc)
raise exc
except Exception as exc:
logger.error(exc)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)
) from exc
@router.put(
"/{user_id}/update_password/",
status_code=status.HTTP_200_OK,
response_model=UserResponse,
)
async def update_password(
user_id: UUID, password: PasswordUpdate, db: Session = Depends(get_db)
):
try:
USER = UserController(db)
USER.update_password(user_id, password.current_password, password.new_password)
return UserResponse.model_validate(USER.details())
except HTTPException as exc:
logger.error(exc)
raise exc
except Exception as exc:
logger.error(exc)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)
) from exc
@router.delete(
"/{user_id}/delete",
status_code=status.HTTP_200_OK,
response_model=UserDeletedResponse,
)
async def delete_user(user_id: UUID, db: Session = Depends(get_db)):
try:
USER = UserController(db)
USER.delete(user_id)
return {"detail": "User Deleted"}
except HTTPException as exc:
logger.error(exc)
raise exc
except Exception as exc:
logger.error(exc)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)
) from exc