ecommerce-4e2y2z/helpers/product_helpers.py
2025-03-29 22:53:51 +01:00

76 lines
2.0 KiB
Python

from typing import Optional, Dict
from pydantic import BaseModel, validator
from datetime import datetime
class ProductBase(BaseModel):
name: str
description: Optional[str] = None
price: float
category: str
class ProductCreate(ProductBase):
pass
class ProductUpdate(ProductBase):
pass
class Product(ProductBase):
id: int
created_at: datetime
updated_at: Optional[datetime] = None
@validator('price')
def price_must_be_positive(cls, value):
if value <= 0:
raise ValueError('Price must be a positive value')
return value
def validate_product_data(product_data: ProductCreate) -> Dict[str, str]:
errors = {}
if not product_data.name.strip():
errors['name'] = 'Product name cannot be empty'
if not product_data.category.strip():
errors['category'] = 'Product category cannot be empty'
return errors
def create_product(db, product_data: ProductCreate):
errors = validate_product_data(product_data)
if errors:
return errors
product = Product(
name=product_data.name,
description=product_data.description,
price=product_data.price,
category=product_data.category,
created_at=datetime.utcnow()
)
db.add(product)
db.commit()
db.refresh(product)
return product
def update_product(db, product_id: int, product_data: ProductUpdate):
product = db.query(Product).filter(Product.id == product_id).first()
if not product:
return {'error': 'Product not found'}
for field, value in product_data.dict(exclude_unset=True).items():
setattr(product, field, value)
product.updated_at = datetime.utcnow()
db.commit()
db.refresh(product)
return product
def get_product_by_id(db, product_id: int):
return db.query(Product).filter(Product.id == product_id).first()
def get_products_by_category(db, category: str):
return db.query(Product).filter(Product.category == category).all()