Files
ppr-ng/backend/app/models/ppr.py
James Pattinson 8a94ce0f5b Initial commit: NextGen PPR System
- FastAPI backend with JWT authentication
- MySQL database with full schema
- Docker Compose orchestration
- CSV data import for 43,208 airports and 519,999 aircraft
- Complete PPR management API
- Modernized replacement for PHP-based system
2025-10-21 17:33:19 +00:00

88 lines
3.4 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 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)
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())