File size: 3,357 Bytes
2f43b92
15ea62b
0359012
 
 
f1cd69e
 
 
 
 
 
 
 
0359012
a854ef9
15ea62b
0359012
 
 
15ea62b
d67439e
0359012
 
d1d97b7
0359012
d1d97b7
 
 
 
 
 
0359012
 
 
 
 
 
 
 
 
15ea62b
 
f1cd69e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0359012
 
35e685d
0359012
35e685d
0359012
 
 
 
 
 
 
 
 
4e4ad14
 
0359012
 
 
 
 
 
 
 
35e685d
0359012
35e685d
0359012
 
 
 
 
 
 
 
 
35e685d
15ea62b
0359012
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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