Files
ppr-ng/backend/app/models/ppr.py
James Pattinson ef273c0c5d User Management
2025-10-23 20:23:29 +00:00

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())