point-of-sales/py-kivy/pos_system/routers/items.py

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"}