FairRelay / brain /app /models /package.py
MouleeswaranM's picture
Upload folder using huggingface_hub
fcf8749 verified
raw
history blame
1.96 kB
"""
Package database model.
Represents delivery packages with location and priority info.
"""
import enum
import uuid
from datetime import datetime
from typing import Optional, List, TYPE_CHECKING
from sqlalchemy import String, Float, Integer, Text, DateTime, Enum
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base, GUID
if TYPE_CHECKING:
from app.models.route import RoutePackage
class PackagePriority(str, enum.Enum):
"""Priority levels for package delivery."""
NORMAL = "NORMAL"
HIGH = "HIGH"
EXPRESS = "EXPRESS"
class Package(Base):
"""
Package model representing items to be delivered.
Contains weight, fragility, location, and priority information.
"""
__tablename__ = "packages"
id: Mapped[uuid.UUID] = mapped_column(
GUID(),
primary_key=True,
default=uuid.uuid4,
)
external_id: Mapped[str] = mapped_column(
String(100),
unique=True,
nullable=False,
index=True,
)
weight_kg: Mapped[float] = mapped_column(Float, nullable=False, default=1.0)
fragility_level: Mapped[int] = mapped_column(Integer, nullable=False, default=1) # 1-5
address: Mapped[str] = mapped_column(Text, nullable=False)
latitude: Mapped[float] = mapped_column(Float, nullable=False)
longitude: Mapped[float] = mapped_column(Float, nullable=False)
priority: Mapped[PackagePriority] = mapped_column(
Enum(PackagePriority),
default=PackagePriority.NORMAL,
)
created_at: Mapped[datetime] = mapped_column(
DateTime,
default=datetime.utcnow,
)
# Relationships
route_packages: Mapped[List["RoutePackage"]] = relationship(
"RoutePackage",
back_populates="package",
cascade="all, delete-orphan",
)
def __repr__(self) -> str:
return f"<Package(id={self.id}, external_id={self.external_id})>"