Files
ppr-ng/backend/alembic/versions/009_drone_requests.py
T
2026-06-22 05:58:26 -04:00

90 lines
5.0 KiB
Python

"""Add drone flight requests
Revision ID: 009_drone_requests
Revises: 008_ppr_strip_acknowledgement
Create Date: 2026-06-19 12:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
revision = '009_drone_requests'
down_revision = '008_ppr_strip_acknowledgement'
branch_labels = None
depends_on = None
drone_status = sa.Enum(
'NEW',
'APPROVED',
'DENIED',
'CANCELED',
'INFLIGHT',
'COMPLETED',
name='dronerequeststatus',
)
def upgrade() -> None:
op.create_table(
'drone_requests',
sa.Column('id', sa.BigInteger(), autoincrement=True, nullable=False),
sa.Column('reference_number', sa.String(length=24), nullable=False),
sa.Column('public_token', sa.String(length=128), nullable=True),
sa.Column('status', drone_status, nullable=False),
sa.Column('operator_name', sa.String(length=128), nullable=False),
sa.Column('operator_id', sa.String(length=64), nullable=True),
sa.Column('flyer_name', sa.String(length=128), nullable=True),
sa.Column('flyer_id', sa.String(length=64), nullable=True),
sa.Column('email', sa.String(length=128), nullable=False),
sa.Column('phone', sa.String(length=32), nullable=True),
sa.Column('flight_date', sa.Date(), nullable=True),
sa.Column('estimated_takeoff_time', sa.String(length=8), nullable=True),
sa.Column('estimated_completion_time', sa.String(length=8), nullable=True),
sa.Column('estimated_takeoff_at', sa.DateTime(), nullable=False),
sa.Column('estimated_completion_at', sa.DateTime(), nullable=False),
sa.Column('maximum_elevation_ft_amsl', sa.Integer(), nullable=False),
sa.Column('location_description', sa.Text(), nullable=True),
sa.Column('location_latitude', sa.Float(), nullable=False),
sa.Column('location_longitude', sa.Float(), nullable=False),
sa.Column('location_inside_frz', sa.Boolean(), nullable=True),
sa.Column('prototype_overlay', sa.JSON(), nullable=True),
sa.Column('applicant_notes', sa.Text(), nullable=True),
sa.Column('operator_comments', sa.Text(), nullable=True),
sa.Column('submitted_via', sa.String(length=32), nullable=False, server_default='PUBLIC'),
sa.Column('submitted_ip', sa.String(length=45), nullable=True),
sa.Column('created_by', sa.String(length=50), nullable=True),
sa.Column('submitted_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False),
sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False),
sa.Column('status_changed_at', sa.DateTime(), nullable=True),
sa.Column('status_changed_by', sa.String(length=50), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('reference_number'),
)
op.create_index(op.f('ix_drone_requests_created_by'), 'drone_requests', ['created_by'], unique=False)
op.create_index(op.f('ix_drone_requests_email'), 'drone_requests', ['email'], unique=False)
op.create_index(op.f('ix_drone_requests_estimated_completion_at'), 'drone_requests', ['estimated_completion_at'], unique=False)
op.create_index(op.f('ix_drone_requests_estimated_takeoff_at'), 'drone_requests', ['estimated_takeoff_at'], unique=False)
op.create_index(op.f('ix_drone_requests_flight_date'), 'drone_requests', ['flight_date'], unique=False)
op.create_index(op.f('ix_drone_requests_operator_name'), 'drone_requests', ['operator_name'], unique=False)
op.create_index(op.f('ix_drone_requests_public_token'), 'drone_requests', ['public_token'], unique=True)
op.create_index(op.f('ix_drone_requests_reference_number'), 'drone_requests', ['reference_number'], unique=True)
op.create_index(op.f('ix_drone_requests_status'), 'drone_requests', ['status'], unique=False)
op.create_index(op.f('ix_drone_requests_submitted_at'), 'drone_requests', ['submitted_at'], unique=False)
op.create_index('idx_drone_status_takeoff', 'drone_requests', ['status', 'estimated_takeoff_at'], unique=False)
def downgrade() -> None:
op.drop_index('idx_drone_status_takeoff', table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_submitted_at'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_status'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_reference_number'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_public_token'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_operator_name'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_flight_date'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_estimated_takeoff_at'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_estimated_completion_at'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_email'), table_name='drone_requests')
op.drop_index(op.f('ix_drone_requests_created_by'), table_name='drone_requests')
op.drop_table('drone_requests')