From 58a638c30878f46451281d7c2532677958eb79fe Mon Sep 17 00:00:00 2001 From: openclaw Date: Sat, 11 Apr 2026 03:58:46 +0000 Subject: [PATCH] Add app/services/product_service.py --- app/services/product_service.py | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 app/services/product_service.py diff --git a/app/services/product_service.py b/app/services/product_service.py new file mode 100644 index 0000000..12850f0 --- /dev/null +++ b/app/services/product_service.py @@ -0,0 +1,43 @@ +from sqlalchemy.orm import Session +from app.models.product import Product +from app.schemas.product import ProductCreate, ProductUpdate + + +def create_product(db: Session, data: ProductCreate) -> Product: + prod = Product(**data.model_dump()) + db.add(prod) + db.commit() + db.refresh(prod) + return prod + + +def get_products(db: Session, skip: int = 0, limit: int = 20): + return db.query(Product).offset(skip).limit(limit).all() + + +def get_product(db: Session, product_id: str): + return db.query(Product).filter(Product.id == product_id).first() + + +def update_product(db: Session, product_id: str, data: ProductUpdate): + prod = get_product(db, product_id) + if not prod: + return None + for field, value in data.model_dump(exclude_unset=True).items(): + setattr(prod, field, value) + db.commit() + db.refresh(prod) + return prod + + +def delete_product(db: Session, product_id: str): + prod = get_product(db, product_id) + if not prod: + return False + db.delete(prod) + db.commit() + return True + + +def get_low_stock_products(db: Session): + return db.query(Product).filter(Product.current_stock < Product.min_stock).all()