41 lines
1.3 KiB
Python
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) |