Files
ppr-ng/backend/app/models/drone_request.py
T
2026-06-22 05:58:26 -04:00

64 lines
2.6 KiB
Python

from enum import Enum
from sqlalchemy import BigInteger, Boolean, Column, Date, DateTime, Enum as SQLEnum, Float, Index, Integer, JSON, String, Text
from sqlalchemy.sql import func
from app.db.session import Base
class DroneRequestStatus(str, Enum):
NEW = "NEW"
APPROVED = "APPROVED"
DENIED = "DENIED"
CANCELED = "CANCELED"
INFLIGHT = "INFLIGHT"
COMPLETED = "COMPLETED"
class DroneRequest(Base):
__tablename__ = "drone_requests"
id = Column(BigInteger, primary_key=True, autoincrement=True)
reference_number = Column(String(24), nullable=False, unique=True, index=True)
public_token = Column(String(128), nullable=True, unique=True, index=True)
status = Column(SQLEnum(DroneRequestStatus), nullable=False, default=DroneRequestStatus.NEW, index=True)
operator_name = Column(String(128), nullable=False, index=True)
operator_id = Column(String(64), nullable=True)
flyer_name = Column(String(128), nullable=True)
flyer_id = Column(String(64), nullable=True)
email = Column(String(128), nullable=False, index=True)
phone = Column(String(32), nullable=True)
flight_date = Column(Date, nullable=True, index=True)
estimated_takeoff_time = Column(String(8), nullable=True)
estimated_completion_time = Column(String(8), nullable=True)
estimated_takeoff_at = Column(DateTime, nullable=False, index=True)
estimated_completion_at = Column(DateTime, nullable=False, index=True)
maximum_elevation_ft_amsl = Column(Integer, nullable=False)
location_description = Column(Text, nullable=True)
location_latitude = Column(Float, nullable=False)
location_longitude = Column(Float, nullable=False)
location_inside_frz = Column(Boolean, nullable=True)
prototype_overlay = Column(JSON, nullable=True)
applicant_notes = Column(Text, nullable=True)
operator_comments = Column(Text, nullable=True)
submitted_via = Column(String(32), nullable=False, default="PUBLIC")
submitted_ip = Column(String(45), nullable=True)
created_by = Column(String(50), nullable=True, index=True)
submitted_at = Column(DateTime, nullable=False, server_default=func.current_timestamp(), index=True)
updated_at = Column(DateTime, nullable=False, server_default=func.current_timestamp(), onupdate=func.current_timestamp())
status_changed_at = Column(DateTime, nullable=True)
status_changed_by = Column(String(50), nullable=True)
__table_args__ = (
Index("idx_drone_status_takeoff", "status", "estimated_takeoff_at"),
)
@property
def notes(self):
return self.applicant_notes