from sqlalchemy import Column, String, Integer, Float, DateTime, ForeignKey, Enum from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy.sql import func from core.database import Base import uuid import enum class OrderStatus(str, enum.Enum): PENDING = "pending" ACCEPTED = "accepted" PREPARING = "preparing" READY = "ready" DELIVERED = "delivered" CANCELED = "canceled" class OnlineOrder(Base): __tablename__ = "online_orders" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) order_number = Column(String, unique=True, nullable=False, index=True) customer_name = Column(String, nullable=False) customer_email = Column(String, nullable=False) customer_phone = Column(String, nullable=False) delivery_address = Column(String, nullable=False) total_amount = Column(Float, nullable=False) status = Column(Enum(OrderStatus), nullable=False, default=OrderStatus.PENDING) created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) order_items = relationship("OrderItem", back_populates="order") class OrderItem(Base): __tablename__ = "order_items" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) order_id = Column(UUID(as_uuid=True), ForeignKey("online_orders.id"), nullable=False) product_name = Column(String, nullable=False) product_price = Column(Float, nullable=False) quantity = Column(Integer, nullable=False) created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) order = relationship("OnlineOrder", back_populates="order_items")