Untitled

 avatar
unknown
python
2 years ago
1.7 kB
2
Indexable
from typing import List
from uuid import UUID

from fastapi import FastAPI, HTTPException, APIRouter

from models import User, Gender, Role, UserUpdate

user_router = APIRouter()

app = FastAPI(title="Hello world")

db: List[User] = [
    User(
        first_name="Vladimir",
        last_name="Artamonov",
        middle_name="Vladimirovich",
        gender=Gender.male,
        roles=[Role.admin, Role.seller]
    ),
    User(
        first_name="Egor",
        last_name="D.",
        gender=Gender.male,
        roles=[Role.user, Role.buyer]
    )
]


@app.get("/")
async def route():
    return {"Hello": "World"}


@user_router.get("/")
async def get_users():
    return db


@user_router.post("/")
async def add_user(user: User):
    db.append(user)
    return {"status": 200, "user": user}


@user_router.delete("/{user_id}")
async def delete_user(user_id: UUID):
    for user in db:
        if user.id == user_id:
            db.remove(user)
            return
    raise HTTPException(
        status_code=404,
        detail=f"User {user_id} does not exist."
    )


@user_router.put("/{user_id}")
async def update_user(user_id: UUID, updates: UserUpdate):
    for user in db:
        if user.id == user_id:
            attributes = (attribute for attribute in updates if attribute[1] is not None)
            for attribute, value in attributes:
                setattr(user, attribute, value)
            return user
    raise HTTPException(
        status_code=404,
        detail=f"User {user_id} does not exist."
    )

app.include_router(user_router, prefix="/users", tags=["Users"])
Editor is loading...