2025-06-05 23:45:53 +00:00

41 lines
1.3 KiB
Python

from typing import List, Optional
from sqlalchemy.orm import Session
from app.crud.base import CRUDBase
from app.models.inventory import InventoryItem
from app.schemas.inventory import InventoryItemCreate, InventoryItemUpdate
class CRUDInventory(CRUDBase[InventoryItem, InventoryItemCreate, InventoryItemUpdate]):
def get_by_product(
self, db: Session, *, product_id: int
) -> Optional[InventoryItem]:
return db.query(InventoryItem).filter(InventoryItem.product_id == product_id).first()
def get_low_stock(
self, db: Session, *, skip: int = 0, limit: int = 100
) -> List[InventoryItem]:
return (
db.query(InventoryItem)
.filter(InventoryItem.quantity <= InventoryItem.min_stock_level)
.offset(skip)
.limit(limit)
.all()
)
def update_quantity(
self, db: Session, *, item_id: int, quantity_change: int
) -> InventoryItem:
db_obj = db.query(InventoryItem).filter(InventoryItem.id == item_id).first()
if db_obj:
new_quantity = db_obj.quantity + quantity_change
# Ensure quantity never goes below 0
db_obj.quantity = max(0, new_quantity)
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
inventory = CRUDInventory(InventoryItem)