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

57 lines
1.6 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(**created_item)
@router.get("/", response_model=List[Item])
async def read_items():
db = get_db()
items = list(db.items.find())
return [Item(**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(**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(**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"}