89 lines
2.6 KiB
Python

import uuid
from typing import List, Optional
from sqlalchemy.orm import Session
from sqlalchemy import func
from models.menu import Menu
from schemas.menu import MenuSchema, MenuCreate, MenuUpdate
def get_all_menus(db: Session) -> List[MenuSchema]:
"""
Retrieves all menus from the database.
Args:
db (Session): The database session.
Returns:
List[MenuSchema]: A list of all menu objects.
"""
menus = db.query(Menu).all()
return [MenuSchema.from_orm(menu) for menu in menus]
def get_menu_by_id(db: Session, menu_id: uuid.UUID) -> Optional[MenuSchema]:
"""
Retrieves a single menu by its ID.
Args:
db (Session): The database session.
menu_id (UUID): The ID of the menu to retrieve.
Returns:
Optional[MenuSchema]: The menu object if found, otherwise None.
"""
menu = db.query(Menu).filter(Menu.id == menu_id).first()
return MenuSchema.from_orm(menu) if menu else None
def get_menus_by_category(db: Session, category: str) -> List[MenuSchema]:
"""
Retrieves menus from the database based on the category.
Args:
db (Session): The database session.
category (str): The category of menus to retrieve.
Returns:
List[MenuSchema]: A list of menu objects matching the category.
"""
menus = db.query(Menu).filter(func.lower(Menu.category) == func.lower(category)).all()
return [MenuSchema.from_orm(menu) for menu in menus]
def create_menu(db: Session, menu_data: MenuCreate) -> MenuSchema:
"""
Creates a new menu in the database.
Args:
db (Session): The database session.
menu_data (MenuCreate): The data for the menu to create.
Returns:
MenuSchema: The newly created menu object.
"""
db_menu = Menu(**menu_data.dict())
db.add(db_menu)
db.commit()
db.refresh(db_menu)
return MenuSchema.from_orm(db_menu)
def update_menu(db: Session, menu_id: uuid.UUID, menu_data: MenuUpdate) -> Optional[MenuSchema]:
"""
Updates an existing menu in the database.
Args:
db (Session): The database session.
menu_id (UUID): The ID of the menu to update.
menu_data (MenuUpdate): The updated data for the menu.
Returns:
Optional[MenuSchema]: The updated menu object if found, otherwise None.
"""
menu = db.query(Menu).filter(Menu.id == menu_id).first()
if not menu:
return None
menu_data = menu_data.dict(exclude_unset=True)
for key, value in menu_data.items():
setattr(menu, key, value)
db.add(menu)
db.commit()
db.refresh(menu)
return MenuSchema.from_orm(menu)