89 lines
2.6 KiB
Python
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) |