Add helper functions for Food
This commit is contained in:
parent
9e907a1c79
commit
290f4f9b47
123
helpers/food_helpers.py
Normal file
123
helpers/food_helpers.py
Normal file
@ -0,0 +1,123 @@
|
||||
from typing import List, Dict, Optional, Union, Any
|
||||
from datetime import datetime
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import and_, or_
|
||||
from models.food import Food
|
||||
from schemas.food import FoodCreate, FoodUpdate
|
||||
|
||||
def get_menu_items(db: Session, active_only: bool = True) -> List[Food]:
|
||||
"""
|
||||
Get list of food items in the menu.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
active_only: If True, returns only active menu items
|
||||
|
||||
Returns:
|
||||
List of Food objects from the menu
|
||||
"""
|
||||
query = db.query(Food)
|
||||
if active_only:
|
||||
query = query.filter(Food.is_active == True)
|
||||
return query.all()
|
||||
|
||||
def filter_menu_by_category(
|
||||
db: Session,
|
||||
category: str,
|
||||
active_only: bool = True
|
||||
) -> List[Food]:
|
||||
"""
|
||||
Filter menu items by category.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
category: Food category to filter by
|
||||
active_only: If True, returns only active menu items
|
||||
|
||||
Returns:
|
||||
List of Food objects filtered by category
|
||||
"""
|
||||
query = db.query(Food).filter(Food.category == category)
|
||||
if active_only:
|
||||
query = query.filter(Food.is_active == True)
|
||||
return query.all()
|
||||
|
||||
def search_menu_items(
|
||||
db: Session,
|
||||
search_term: str,
|
||||
active_only: bool = True
|
||||
) -> List[Food]:
|
||||
"""
|
||||
Search menu items by name or description.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
search_term: Term to search for in name/description
|
||||
active_only: If True, returns only active menu items
|
||||
|
||||
Returns:
|
||||
List of matching Food objects
|
||||
"""
|
||||
search = f"%{search_term}%"
|
||||
query = db.query(Food).filter(
|
||||
or_(
|
||||
Food.name.ilike(search),
|
||||
Food.description.ilike(search)
|
||||
)
|
||||
)
|
||||
if active_only:
|
||||
query = query.filter(Food.is_active == True)
|
||||
return query.all()
|
||||
|
||||
def get_food_by_price_range(
|
||||
db: Session,
|
||||
min_price: float,
|
||||
max_price: float,
|
||||
active_only: bool = True
|
||||
) -> List[Food]:
|
||||
"""
|
||||
Get menu items within a price range.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
min_price: Minimum price
|
||||
max_price: Maximum price
|
||||
active_only: If True, returns only active menu items
|
||||
|
||||
Returns:
|
||||
List of Food objects within price range
|
||||
"""
|
||||
query = db.query(Food).filter(
|
||||
and_(
|
||||
Food.price >= min_price,
|
||||
Food.price <= max_price
|
||||
)
|
||||
)
|
||||
if active_only:
|
||||
query = query.filter(Food.is_active == True)
|
||||
return query.order_by(Food.price.asc()).all()
|
||||
|
||||
def format_menu_response(foods: List[Food]) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
Format menu items for API response.
|
||||
|
||||
Args:
|
||||
foods: List of Food objects
|
||||
|
||||
Returns:
|
||||
List of formatted food dictionaries
|
||||
"""
|
||||
return [
|
||||
{
|
||||
"id": food.id,
|
||||
"name": food.name,
|
||||
"description": food.description,
|
||||
"price": float(food.price),
|
||||
"category": food.category,
|
||||
"is_available": food.is_active,
|
||||
"image_url": food.image_url,
|
||||
"allergens": food.allergens,
|
||||
"nutritional_info": food.nutritional_info
|
||||
}
|
||||
for food in foods
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user