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)