
- 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
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from enum import Enum
|
|
|
|
from sqlalchemy import Column, DateTime, Enum as SQLEnum, Float, ForeignKey, Integer, Text
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from app.models.base import BaseModel, TimestampMixin
|
|
|
|
|
|
class DeliveryStatus(str, Enum):
|
|
"""Enum for delivery statuses."""
|
|
|
|
PENDING = "pending"
|
|
ASSIGNED = "assigned"
|
|
PICKED_UP = "picked_up"
|
|
IN_TRANSIT = "in_transit"
|
|
DELIVERED = "delivered"
|
|
FAILED = "failed"
|
|
|
|
|
|
class Delivery(BaseModel, TimestampMixin):
|
|
"""Delivery model."""
|
|
|
|
driver_id = Column(Integer, ForeignKey("user.id"), nullable=True)
|
|
status = Column(SQLEnum(DeliveryStatus), default=DeliveryStatus.PENDING, nullable=False)
|
|
pickup_time = Column(DateTime, nullable=True)
|
|
delivery_time = Column(DateTime, nullable=True)
|
|
current_latitude = Column(Float, nullable=True)
|
|
current_longitude = Column(Float, nullable=True)
|
|
notes = Column(Text, nullable=True)
|
|
|
|
# Relationships
|
|
driver = relationship("User", foreign_keys=[driver_id], backref="deliveries")
|
|
order = relationship("Order", back_populates="delivery", uselist=False)
|
|
|
|
def __repr__(self) -> str:
|
|
return f"<Delivery {self.id}>" |