File size: 2,679 Bytes
1865436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import APIRouter, Body, Form
from fastapi.encoders import jsonable_encoder

from typing_extensions import Annotated

from server.services import login_user, get_project_user
from server.database import (
    add_user,
    delete_user,
    retrieve_user,
    retrieve_users,
    update_user,
)
from server.models.user import (
    ErrorResponseModel,
    ResponseModel,
    UserSchema,
    UpdateUserModel,
)

router = APIRouter()

# CREATE
@router.post("/", response_description="User data added into the database")
async def add_user_data(user: UserSchema = Body(...)):
    user = jsonable_encoder(user)
    new_user = await add_user(user)
    return ResponseModel(new_user, "User added successfully.")

# READ
@router.get("/", response_description="Users retrieved")
async def get_users():
    users = await retrieve_users()
    if users:
        return ResponseModel(users, "Users data retrieved successfully")
    return ResponseModel(users, "Empty list returned")


@router.get("/{username}", response_description="User data retrieved")
async def get_user_data(username):
    user = await retrieve_user(username)
    if user:
        return ResponseModel(user, "User data retrieved successfully")
    return ErrorResponseModel("An error occurred.", 404, "User doesn't exist.")

# UPDATE
@router.put("/{username}")
async def update_user_data(username: str, req: UpdateUserModel = Body(...)):
    req = {k: v for k, v in req.dict().items() if v is not None}
    updated_user = await update_user(username, req)
    if updated_user:
        return ResponseModel(
            "User with ID: {} name update is successful".format(id),
            "User name updated successfully",
        )
    return ErrorResponseModel(
        "An error occurred",
        404,
        "There was an error updating the user data.",
    )

# DELETE
@router.delete("/{username}", response_description="User data deleted from the database")
async def delete_user_data(username: str):
    deleted_user = await delete_user(username)
    if deleted_user:
        return ResponseModel(
            "User with ID: {} removed".format(username), "User deleted successfully"
        )
    return ErrorResponseModel(
        "An error occurred", 404, "User with username {0} doesn't exist".format(username)
    )

@router.post("/login", response_description="User login")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return login_user(username, password)
    # return {"username": username}

@router.post("/get_project", response_description="User login")
async def get_project(username: Annotated[str, Form()]):
    return get_project_user(username)