
- Create base model with timestamp mixin - Add user model with roles - Add restaurant model - Add menu item model with categories - Add order and order item models - Add delivery model - Fix import issues and linting errors
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
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"<MenuItem {self.name}>" |