Desk-Back2 / app /models /database.py
Fred808's picture
Upload 77 files
5111c4b verified
from sqlalchemy import Column, Integer, String, Float, ForeignKey, DateTime, Boolean, JSON, Enum
from sqlalchemy.orm import relationship
from datetime import datetime
from .menu import CategoryType
from ..db.database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
full_name = Column(String)
hashed_password = Column(String)
role = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
class Category(Base):
__tablename__ = "categories"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
type = Column(Enum(CategoryType))
description = Column(String, nullable=True)
items = relationship("MenuItem", back_populates="category")
class MenuItem(Base):
__tablename__ = "menu_items"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
description = Column(String, nullable=True)
price = Column(Float)
category_id = Column(Integer, ForeignKey("categories.id"))
image_url = Column(String, nullable=True)
is_available = Column(Boolean, default=True)
allergens = Column(JSON, nullable=True)
preparation_time = Column(Integer, nullable=True)
category = relationship("Category", back_populates="items")
class Order(Base):
__tablename__ = "orders"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
total_amount = Column(Float)
status = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
items = relationship("OrderItem", back_populates="order")
payment = relationship("Payment", back_populates="order")
class OrderItem(Base):
__tablename__ = "order_items"
id = Column(Integer, primary_key=True, index=True)
order_id = Column(Integer, ForeignKey("orders.id"))
menu_item_id = Column(Integer, ForeignKey("menu_items.id"))
quantity = Column(Integer)
unit_price = Column(Float)
order = relationship("Order", back_populates="items")
menu_item = relationship("MenuItem")
class Payment(Base):
__tablename__ = "payments"
id = Column(Integer, primary_key=True, index=True)
order_id = Column(Integer, ForeignKey("orders.id"))
amount = Column(Float)
method = Column(String)
status = Column(String)
transaction_id = Column(String, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
order = relationship("Order", back_populates="payment")