class Pilot(db.Model): licence_no = db.Column(db.Integer, nullable=False) experience = db.Column(db.Integer, nullable=False) rank = db.Column(db.String(1)) id = db.Column(db.Integer, db.ForeignKey('employee.id'), primary_key=True) crew_pilot = db.relationship('Crew', backref='pilot', foreign_keys="[Crew.pilot_id]", lazy=True) crew_copilot = db.relationship('Crew', backref='copilot', foreign_keys="[Crew.copilot_id]", lazy=True) def __repr__(self): return f"Pilot('{self.employee.user.name}', '{self.employee.user.email}', '{self.employee.user.dob}', '{self.experience}', '{self.rank}')"
class Flight(db.Model): id = db.Column(db.Integer, primary_key=True) plane_id = db.Column(db.Integer, db.ForeignKey('plane.id'), nullable=False, unique=True) from_id = db.Column(db.Integer, db.ForeignKey('airport.id'), nullable=False) to_id = db.Column(db.Integer, db.ForeignKey('airport.id'), nullable=False) day = db.Column(db.String(15), nullable=False) depart_at = db.Column(db.Time, nullable=False) duration = db.Column(db.Time, nullable=False) bookings = db.relationship('Booking', backref='flight', lazy=True) status = db.relationship('Status', backref='flight', lazy=True) def __repr__(self): return f"Flight('{self.id}', '{self.from_id}', '{self.to_id}', '{self.day}')"
class Airport(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) region = db.Column(db.String(100), nullable=False) city = db.Column(db.String(100), nullable=False) country = db.Column(db.String(100), nullable=False) num_terminals = db.Column(db.Integer, nullable=False) dpt_flights = db.relationship('Flight', backref='from_airport', foreign_keys="[Flight.from_id]", lazy=True) arrv_flights = db.relationship('Flight', backref='to_airport', foreign_keys="[Flight.to_id]", lazy=True) def __repr__(self): return f"Airport('{self.id}', '{self.name}', '{self.region}, '{self.city}', '{self.country}')"
class Employee(db.Model): position = db.Column(db.String(20), nullable=False) joining_date = db.Column(db.Date, nullable=False) salary = db.Column(db.Integer, nullable=False) id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) pilot = db.relationship('Pilot', backref='employee', lazy=True) crew_emp_1 = db.relationship('Crew', backref='employee1', foreign_keys="[Crew.employee1_id]", lazy=True) crew_emp_2 = db.relationship('Crew', backref='employee2', foreign_keys="[Crew.employee2_id]", lazy=True) crew_emp_3 = db.relationship('Crew', backref='employee3', foreign_keys="[Crew.employee3_id]", lazy=True) def __repr__(self): return f"Employee('{self.user.name}', '{self.user.email}', '{self.user.dob}', '{self.position}', '{self.salary}')"
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) email = db.Column(db.String(20), unique=True, nullable=False) address = db.Column(db.Text, nullable=False) pincode = db.Column(db.String(6), nullable=False) dob = db.Column(db.Date, nullable=False) phnum = db.Column(db.String(10)) gender = db.Column(db.String(1)) password = db.Column(db.String(60), nullable=False) bookings = db.relationship('Booking', backref='user', lazy=True) employee = db.relationship('Employee', backref='user', lazy=True, uselist=False) is_employee = db.Column(db.Boolean, default=False) is_admin = db.Column(db.Boolean, default=False) @hybrid_property def age(self): today = datetime.today() return today.year - self.dob.year - ((today.month, today.day) < (self.dob.month, self.dob.day)) def get_reset_token(self, expire_sec=1800): s = Serializer(current_app.config['SECRET_KEY'], expire_sec) return s.dumps({'user_id': self.id}).decode('utf-8') @staticmethod def verify_reset_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: user_id = s.loads(token)['user_id'] except: return None return User.query.get(user_id) def __repr__(self): return f"User('{self.name}', '{self.email}', '{self.dob}', '{self.gender}')"
class Plane(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) manufacturer = db.Column(db.String(100), nullable=False) mfd_date = db.Column(db.Date, nullable=False) engine_chk = db.Column(db.DateTime, nullable=False) fuel_chk = db.Column(db.DateTime, nullable=False) part_chk = db.Column(db.DateTime, nullable=False) capacity = db.Column(db.Integer, nullable=False) flight = db.relationship('Flight', backref='plane', lazy=True, uselist=False) def __repr__(self): return f"Plane('{self.id}', '{self.name}', '{self.manufacturer}', '{self.mfd_date}', '{self.capacity}')"
class Crew(db.Model): id = db.Column(db.Integer, primary_key=True) pilot_id = db.Column(db.Integer, db.ForeignKey('pilot.id'), nullable=False) copilot_id = db.Column(db.Integer, db.ForeignKey('pilot.id'), nullable=False) employee1_id = db.Column(db.Integer, db.ForeignKey('employee.id'), nullable=False) employee2_id = db.Column(db.Integer, db.ForeignKey('employee.id'), nullable=False) employee3_id = db.Column(db.Integer, db.ForeignKey('employee.id'), nullable=False) crew_status = db.relationship('Status', backref='crew', lazy=True, uselist=False) def __repr__(self): return f"Crew('{self.pilot_id}', '{self.copilot_id}', '{self.employee1_id}', '{self.employee2_id}', '{self.employee3_id}')"