from enum import Enum from sqlalchemy import Boolean, Column, Enum as SQLEnum, Float, ForeignKey, Integer, String, Text from sqlalchemy.orm import relationship from app.models.base import BaseModel, TimestampMixin class MenuItemCategory(str, Enum): """Enum for menu item categories.""" APPETIZER = "appetizer" MAIN_COURSE = "main_course" DESSERT = "dessert" BEVERAGE = "beverage" SIDE = "side" SPECIAL = "special" class MenuItem(BaseModel, TimestampMixin): """Menu item model.""" name = Column(String, nullable=False) description = Column(Text, nullable=True) price = Column(Float, nullable=False) image_url = Column(String, nullable=True) category = Column(SQLEnum(MenuItemCategory), nullable=False) is_vegetarian = Column(Boolean, default=False, nullable=False) is_vegan = Column(Boolean, default=False, nullable=False) is_gluten_free = Column(Boolean, default=False, nullable=False) is_available = Column(Boolean, default=True, nullable=False) restaurant_id = Column(Integer, ForeignKey("restaurant.id"), nullable=False) # Relationships restaurant = relationship("Restaurant", back_populates="menu_items") order_items = relationship("OrderItem", back_populates="menu_item") def __repr__(self) -> str: return f""