from fastapi import FastAPI, HTTPException from pydantic import BaseModel from db import db # assumes db is an instance of AsyncIOMotorDatabase from bson import ObjectId from bson.errors import InvalidId app = FastAPI() class Item(BaseModel): name: str description: str @app.post("/items/") async def create_item(item: Item): result = await db["items"].insert_one(item.dict()) return {"id": str(result.inserted_id), "message": "Item created"} @app.get("/items/") async def read_items(): items = [] cursor = db["items"].find() # This returns an AsyncIOMotorCursor async for document in cursor: document["id"] = str(document["_id"]) del document["_id"] items.append(document) return items @app.get("/") def index(): return {"message": "Hello World"} @app.get("/items/{item_id}") async def read_item(item_id: str): try: oid = ObjectId(item_id) except InvalidId: raise HTTPException(status_code=400, detail="Invalid item ID format") item = await db["items"].find_one({"_id": oid}) if not item: raise HTTPException(status_code=404, detail="Item not found") item["id"] = str(item["_id"]) del item["_id"] return item