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""