corner-nmyago/helpers/pen_helpers.py
2025-03-26 23:08:24 +01:00

91 lines
2.2 KiB
Python

from typing import Optional
from pydantic import BaseModel, validator
from sqlalchemy.orm import Session
from models import Pen
class PenCreate(BaseModel):
name: str
color: str
brand: str
price: int
@validator('name', 'color', 'brand')
def validate_string_not_empty(cls, value):
if not value or not value.strip():
raise ValueError('Field cannot be empty or contain only whitespace characters')
return value
@validator('price')
def validate_price(cls, value):
if value < 0:
raise ValueError('Price cannot be negative')
return value
def create_pen(db: Session, pen_data: PenCreate) -> Pen:
"""
Create a new pen in the database.
Args:
db: Database session
pen_data: Pen data for creation
Returns:
Pen object
"""
pen = Pen(**pen_data.dict())
db.add(pen)
db.commit()
db.refresh(pen)
return pen
def get_pen_by_name(db: Session, name: str) -> Optional[Pen]:
"""
Get a pen by its name.
Args:
db: Database session
name: Name of the pen
Returns:
Pen object if found, None otherwise
"""
return db.query(Pen).filter(Pen.name == name).first()
def update_pen(db: Session, pen_id: int, pen_data: PenCreate) -> Optional[Pen]:
"""
Update an existing pen in the database.
Args:
db: Database session
pen_id: ID of the pen to update
pen_data: Updated pen data
Returns:
Updated Pen object if successful, None otherwise
"""
pen = db.query(Pen).filter(Pen.id == pen_id).first()
if pen:
for key, value in pen_data.dict(exclude_unset=True).items():
setattr(pen, key, value)
db.commit()
db.refresh(pen)
return pen
return None
def delete_pen(db: Session, pen_id: int) -> bool:
"""
Delete a pen from the database.
Args:
db: Database session
pen_id: ID of the pen to delete
Returns:
True if successful, False otherwise
"""
pen = db.query(Pen).filter(Pen.id == pen_id).first()
if pen:
db.delete(pen)
db.commit()
return True
return False