Add helper functions for Pen
This commit is contained in:
parent
9d0b223ed5
commit
eadc83edad
67
helpers/pen_helpers.py
Normal file
67
helpers/pen_helpers.py
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user