diff --git a/helpers/pen_helpers.py b/helpers/pen_helpers.py new file mode 100644 index 0000000..3c5b25c --- /dev/null +++ b/helpers/pen_helpers.py @@ -0,0 +1,67 @@ +from typing import Optional +from pydantic import BaseModel, validator + +class Pen(BaseModel): + name: str + color: str + brand: str + price: int + stock: int + + @validator('name') + def name_must_not_be_empty(cls, value): + if not value.strip(): + raise ValueError('Name cannot be empty') + return value + + @validator('color') + def color_must_not_be_empty(cls, value): + if not value.strip(): + raise ValueError('Color cannot be empty') + return value + + @validator('brand') + def brand_must_not_be_empty(cls, value): + if not value.strip(): + raise ValueError('Brand cannot be empty') + return value + + @validator('price') + def price_must_be_positive(cls, value): + if value <= 0: + raise ValueError('Price must be a positive integer') + return value + + @validator('stock') + def stock_must_be_non_negative(cls, value): + if value < 0: + raise ValueError('Stock cannot be negative') + return value + +def create_pen(db, pen_data: Pen): + pen = Pen(**pen_data.dict()) + db.add(pen) + db.commit() + db.refresh(pen) + return pen + +def get_pen(db, pen_id: int) -> Optional[Pen]: + return db.query(Pen).filter(Pen.id == pen_id).first() + +def update_pen(db, pen_id: int, pen_data: Pen): + pen = get_pen(db, pen_id) + if not pen: + return None + for field, value in pen_data.dict(exclude_unset=True).items(): + setattr(pen, field, value) + db.commit() + db.refresh(pen) + return pen + +def delete_pen(db, pen_id: int): + pen = get_pen(db, pen_id) + if not pen: + return None + db.delete(pen) + db.commit() + return pen \ No newline at end of file