57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from fastapi import APIRouter, HTTPException, Depends
|
|
from bson import ObjectId
|
|
from ..models import Item
|
|
from ..database import get_db
|
|
from typing import List
|
|
|
|
router = APIRouter(
|
|
prefix="/items",
|
|
tags=["items"]
|
|
)
|
|
|
|
|
|
@router.post("/", response_model=Item)
|
|
async def create_item(item: Item):
|
|
db = get_db()
|
|
item_dict = item.model_dump(exclude={"id"})
|
|
result = db.items.insert_one(item_dict)
|
|
created_item = db.items.find_one({"_id": result.inserted_id})
|
|
return Item.model_validate(created_item)
|
|
|
|
|
|
@router.get("/", response_model=List[Item])
|
|
async def read_items():
|
|
db = get_db()
|
|
items = list(db.items.find())
|
|
return [Item.model_validate(item) for item in items]
|
|
|
|
|
|
@router.get("/{item_id}", response_model=Item)
|
|
async def read_item(item_id: str):
|
|
db = get_db()
|
|
item = db.items.find_one({"_id": ObjectId(item_id)})
|
|
if item is None:
|
|
raise HTTPException(status_code=404, detail="Item not found")
|
|
return Item.model_validate(item)
|
|
|
|
|
|
@router.put("/{item_id}", response_model=Item)
|
|
async def update_item(item_id: str, item: Item):
|
|
db = get_db()
|
|
update_data = item.model_dump(exclude={"id"})
|
|
result = db.items.update_one(
|
|
{"_id": ObjectId(item_id)}, {"$set": update_data})
|
|
if result.modified_count == 0:
|
|
raise HTTPException(status_code=404, detail="Item not found")
|
|
updated_item = db.items.find_one({"_id": ObjectId(item_id)})
|
|
return Item.model_validate(updated_item)
|
|
|
|
|
|
@router.delete("/{item_id}", response_model=dict)
|
|
async def delete_item(item_id: str):
|
|
db = get_db()
|
|
result = db.items.delete_one({"_id": ObjectId(item_id)})
|
|
if result.deleted_count == 0:
|
|
raise HTTPException(status_code=404, detail="Item not found")
|
|
return {"message": "Item deleted successfully"}
|