76 lines
1.9 KiB
Python
76 lines
1.9 KiB
Python
from typing import List, Dict, Optional
|
|
from sqlalchemy.orm import Session
|
|
from models.meal import Meal
|
|
|
|
def get_all_meals(db: Session) -> List[Meal]:
|
|
"""
|
|
Get a list of all available meals.
|
|
|
|
Args:
|
|
db: Database session
|
|
|
|
Returns:
|
|
List of Meal objects
|
|
"""
|
|
return db.query(Meal).all()
|
|
|
|
def filter_meals_by_category(db: Session, category: str) -> List[Meal]:
|
|
"""
|
|
Get a list of meals filtered by category.
|
|
|
|
Args:
|
|
db: Database session
|
|
category: Category to filter by
|
|
|
|
Returns:
|
|
List of Meal objects matching the category
|
|
"""
|
|
return db.query(Meal).filter(Meal.category == category).all()
|
|
|
|
def filter_meals_by_price_range(db: Session, min_price: float, max_price: float) -> List[Meal]:
|
|
"""
|
|
Get a list of meals filtered by price range.
|
|
|
|
Args:
|
|
db: Database session
|
|
min_price: Minimum price
|
|
max_price: Maximum price
|
|
|
|
Returns:
|
|
List of Meal objects within the specified price range
|
|
"""
|
|
return db.query(Meal).filter(Meal.price >= min_price, Meal.price <= max_price).all()
|
|
|
|
def get_meal_by_id(db: Session, meal_id: int) -> Optional[Meal]:
|
|
"""
|
|
Get a meal by its ID.
|
|
|
|
Args:
|
|
db: Database session
|
|
meal_id: ID of the meal
|
|
|
|
Returns:
|
|
Meal object if found, None otherwise
|
|
"""
|
|
return db.query(Meal).filter(Meal.id == meal_id).first()
|
|
|
|
def update_meal_details(db: Session, meal_id: int, meal_data: Dict) -> Optional[Meal]:
|
|
"""
|
|
Update details of a meal.
|
|
|
|
Args:
|
|
db: Database session
|
|
meal_id: ID of the meal to update
|
|
meal_data: Dictionary containing updated meal data
|
|
|
|
Returns:
|
|
Updated Meal object if successful, None otherwise
|
|
"""
|
|
meal = get_meal_by_id(db, meal_id)
|
|
if meal:
|
|
for key, value in meal_data.items():
|
|
setattr(meal, key, value)
|
|
db.commit()
|
|
db.refresh(meal)
|
|
return meal
|
|
return None |