2025-05-30 20:35:55 +00:00

99 lines
2.4 KiB
Python

"""
Food service for managing food operations
"""
from typing import Optional, List, Dict, Any, Union
from sqlalchemy.orm import Session
from app import models, schemas
def get(db: Session, food_id: int) -> Optional[models.Food]:
"""
Get a food item by ID
"""
return db.query(models.Food).filter(models.Food.id == food_id).first()
def get_multi(
db: Session, *, skip: int = 0, limit: int = 100, name_filter: Optional[str] = None
) -> List[models.Food]:
"""
Get multiple food items, with optional name filter
"""
query = db.query(models.Food)
if name_filter:
query = query.filter(models.Food.name.ilike(f"%{name_filter}%"))
return query.order_by(models.Food.name).offset(skip).limit(limit).all()
def get_multi_by_user(
db: Session, *, user_id: int, skip: int = 0, limit: int = 100
) -> List[models.Food]:
"""
Get multiple food items created by a specific user
"""
return (
db.query(models.Food)
.filter(models.Food.created_by_id == user_id)
.order_by(models.Food.name)
.offset(skip)
.limit(limit)
.all()
)
def create(
db: Session, *, obj_in: schemas.FoodCreate, created_by_id: Optional[int] = None
) -> models.Food:
"""
Create a new food item
"""
db_obj = models.Food(
name=obj_in.name,
description=obj_in.description,
calories_per_100g=obj_in.calories_per_100g,
protein_g=obj_in.protein_g,
carbs_g=obj_in.carbs_g,
fat_g=obj_in.fat_g,
fiber_g=obj_in.fiber_g,
is_verified=obj_in.is_verified,
created_by_id=created_by_id,
)
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
def update(
db: Session, *, db_obj: models.Food, obj_in: Union[schemas.FoodUpdate, Dict[str, Any]]
) -> models.Food:
"""
Update a food item
"""
if isinstance(obj_in, dict):
update_data = obj_in
else:
update_data = obj_in.model_dump(exclude_unset=True)
for field in update_data:
if hasattr(db_obj, field):
setattr(db_obj, field, update_data[field])
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
def delete(db: Session, *, food_id: int) -> models.Food:
"""
Delete a food item
"""
food = db.query(models.Food).filter(models.Food.id == food_id).first()
db.delete(food)
db.commit()
return food