add code first file
parent
bee27509a4
commit
5f98b22da3
|
|
@ -0,0 +1,110 @@
|
||||||
|
from fastapi import FastAPI, HTTPException, Path, Query, status
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
app = FastAPI(
|
||||||
|
title="User Service API",
|
||||||
|
description="Simple CRUD API to demonstrate Code First OpenAPI generation with FastAPI",
|
||||||
|
version="1.0.0"
|
||||||
|
)
|
||||||
|
|
||||||
|
# --------------------
|
||||||
|
# Models
|
||||||
|
# --------------------
|
||||||
|
|
||||||
|
class UserBase(BaseModel):
|
||||||
|
name: str = Field(..., example="Alice")
|
||||||
|
age: int = Field(..., example="22")
|
||||||
|
email: str = Field(..., example="alice@example.com")
|
||||||
|
|
||||||
|
class UserCreate(UserBase):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class User(UserBase):
|
||||||
|
id: int = Field(..., example=1)
|
||||||
|
|
||||||
|
# --------------------
|
||||||
|
# Fake database
|
||||||
|
# --------------------
|
||||||
|
|
||||||
|
users_db: dict[int, User] = {}
|
||||||
|
|
||||||
|
# --------------------
|
||||||
|
# CRUD Endpoints
|
||||||
|
# --------------------
|
||||||
|
|
||||||
|
@app.post(
|
||||||
|
"/users",
|
||||||
|
response_model=User,
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
summary="Create a new user",
|
||||||
|
description="Creates a new user and returns the created resource",
|
||||||
|
tags=["Users"]
|
||||||
|
)
|
||||||
|
def create_user(user: UserCreate):
|
||||||
|
user_id = len(users_db) + 1
|
||||||
|
new_user = User(id=user_id, **user.dict())
|
||||||
|
users_db[user_id] = new_user
|
||||||
|
return new_user
|
||||||
|
|
||||||
|
|
||||||
|
@app.get(
|
||||||
|
"/users",
|
||||||
|
response_model=List[User],
|
||||||
|
summary="List all users",
|
||||||
|
description="Returns a list of all users",
|
||||||
|
tags=["Users"]
|
||||||
|
)
|
||||||
|
def list_users(
|
||||||
|
limit: int = Query(10, ge=1, le=100, description="Maximum number of users to return")
|
||||||
|
):
|
||||||
|
return list(users_db.values())[:limit]
|
||||||
|
|
||||||
|
|
||||||
|
@app.get(
|
||||||
|
"/users/{user_id}",
|
||||||
|
response_model=User,
|
||||||
|
summary="Get user by ID",
|
||||||
|
description="Returns a single user by its ID",
|
||||||
|
tags=["Users"]
|
||||||
|
)
|
||||||
|
def get_user(
|
||||||
|
user_id: int = Path(..., ge=1, description="The ID of the user")
|
||||||
|
):
|
||||||
|
user = users_db.get(user_id)
|
||||||
|
if not user:
|
||||||
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
@app.put(
|
||||||
|
"/users/{user_id}",
|
||||||
|
response_model=User,
|
||||||
|
summary="Update a user",
|
||||||
|
description="Updates an existing user",
|
||||||
|
tags=["Users"]
|
||||||
|
)
|
||||||
|
def update_user(
|
||||||
|
user_id: int = Path(..., ge=1, description="The ID of the user"),
|
||||||
|
user: UserCreate = ...
|
||||||
|
):
|
||||||
|
if user_id not in users_db:
|
||||||
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
|
updated_user = User(id=user_id, **user.dict())
|
||||||
|
users_db[user_id] = updated_user
|
||||||
|
return updated_user
|
||||||
|
|
||||||
|
|
||||||
|
@app.delete(
|
||||||
|
"/users/{user_id}",
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
summary="Delete a user",
|
||||||
|
description="Deletes a user by its ID",
|
||||||
|
tags=["Users"]
|
||||||
|
)
|
||||||
|
def delete_user(
|
||||||
|
user_id: int = Path(..., ge=1, description="The ID of the user")
|
||||||
|
):
|
||||||
|
if user_id not in users_db:
|
||||||
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
|
del users_db[user_id]
|
||||||
Loading…
Reference in New Issue