65 lines
2.6 KiB
Python
65 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"
|
|
PENDING = "PENDING"
|
|
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
|