95 lines
3.6 KiB
Python
95 lines
3.6 KiB
Python
from sqlalchemy import Column, Integer, String, DateTime, Text, Enum as SQLEnum, BigInteger
|
|
from sqlalchemy.sql import func
|
|
from enum import Enum
|
|
from app.db.session import Base
|
|
|
|
|
|
class PPRStatus(str, Enum):
|
|
NEW = "NEW"
|
|
CONFIRMED = "CONFIRMED"
|
|
CANCELED = "CANCELED"
|
|
LANDED = "LANDED"
|
|
DELETED = "DELETED"
|
|
DEPARTED = "DEPARTED"
|
|
|
|
|
|
class UserRole(str, Enum):
|
|
ADMINISTRATOR = "ADMINISTRATOR"
|
|
OPERATOR = "OPERATOR"
|
|
READ_ONLY = "READ_ONLY"
|
|
|
|
|
|
class PPRRecord(Base):
|
|
__tablename__ = "submitted"
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
status = Column(SQLEnum(PPRStatus), nullable=False, default=PPRStatus.NEW)
|
|
ac_reg = Column(String(16), nullable=False)
|
|
ac_type = Column(String(32), nullable=False)
|
|
ac_call = Column(String(16), nullable=True)
|
|
captain = Column(String(64), nullable=False)
|
|
fuel = Column(String(16), nullable=True)
|
|
in_from = Column(String(64), nullable=False)
|
|
eta = Column(DateTime, nullable=False)
|
|
pob_in = Column(Integer, nullable=False)
|
|
out_to = Column(String(64), nullable=True)
|
|
etd = Column(DateTime, nullable=True)
|
|
pob_out = Column(Integer, nullable=True)
|
|
email = Column(String(128), nullable=True)
|
|
phone = Column(String(16), nullable=True)
|
|
notes = Column(String(2000), nullable=True)
|
|
landed_dt = Column(DateTime, nullable=True)
|
|
departed_dt = Column(DateTime, nullable=True)
|
|
created_by = Column(String(16), nullable=True)
|
|
submitted_dt = Column(DateTime, nullable=False, server_default=func.current_timestamp())
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = "users"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
username = Column(String(50), nullable=False, unique=True, index=True)
|
|
password = Column(String(255), nullable=False)
|
|
role = Column(SQLEnum(UserRole), nullable=False, default=UserRole.READ_ONLY)
|
|
|
|
|
|
class Journal(Base):
|
|
__tablename__ = "journal"
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
ppr_id = Column(Integer, nullable=False, index=True)
|
|
entry = Column(Text, nullable=False)
|
|
user = Column(Text, nullable=False)
|
|
ip = Column(Text, nullable=False)
|
|
entry_dt = Column(DateTime, nullable=False, server_default=func.current_timestamp())
|
|
|
|
|
|
class Airport(Base):
|
|
__tablename__ = "airports"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
icao = Column(String(4), nullable=False, unique=True, index=True)
|
|
iata = Column(String(3), nullable=True, index=True)
|
|
name = Column(String(255), nullable=False)
|
|
country = Column(String(100), nullable=False)
|
|
city = Column(String(100), nullable=True)
|
|
timezone = Column(String(50), nullable=True)
|
|
latitude = Column(Text, nullable=True)
|
|
longitude = Column(Text, nullable=True)
|
|
elevation = Column(Integer, nullable=True)
|
|
created_at = Column(DateTime, nullable=False, server_default=func.current_timestamp())
|
|
|
|
|
|
class Aircraft(Base):
|
|
__tablename__ = "aircraft"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
icao24 = Column(String(6), nullable=True)
|
|
registration = Column(String(25), nullable=True, index=True)
|
|
manufacturer_icao = Column(String(50), nullable=True)
|
|
type_code = Column(String(30), nullable=True)
|
|
manufacturer_name = Column(String(255), nullable=True)
|
|
model = Column(String(255), nullable=True)
|
|
clean_reg = Column(String(25), nullable=True, index=True)
|
|
created_at = Column(DateTime, nullable=False, server_default=func.current_timestamp())
|
|
updated_at = Column(DateTime, nullable=False, server_default=func.current_timestamp()) |