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
This commit is contained in:
1
backend/app/models/__init__.py
Normal file
1
backend/app/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
# Empty __init__.py files to make Python packages
|
||||
88
backend/app/models/ppr.py
Normal file
88
backend/app/models/ppr.py
Normal file
@@ -0,0 +1,88 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user