class User(db.Model): __tablename__ = "users" user_id = db.Column(db.Integer(), primary_key=True) firstname = db.Column(db.String(), nullable=False) lastname = db.Column(db.String(), nullable=False) score = db.Column(db.Integer(), nullable=False)
class Question(db.Model): __tablename__ = "question" id = db.Column(db.Integer, primary_key=True) content = db.Column(db.String) correct_answer = db.Column(db.String) score = db.Column(db.Integer) theme_id = db.Column(db.Integer, db.ForeignKey("theme.id"))
class UserSession(db.Model): __tablename__ = "user_session" id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.user_id")) session_id = db.Column(db.Integer, db.ForeignKey("session.id")) score = db.Column(db.Integer, default=0)
class TicketFlight(db.Model, DCConverter): __tablename__ = "ticket_flights" ticket_no = db.Column(db.String(13), nullable=False) flight_id = db.Column(db.Integer(), nullable=False) fare_conditions = db.Column(db.String(10), nullable=False) amount = db.Column(db.Numeric(), nullable=False)
class Ticket(db.Model, DCConverter): __tablename__ = "tickets" ticket_no = db.Column(db.String(13), primary_key=True) book_ref = db.Column(db.String(6), nullable=False) passenger_id = db.Column(db.String(20), nullable=False, index=True) passenger_name = db.Column(db.Text(), nullable=False) contact_data = db.Column(JSONB)
class GameSession(db.Model): __tablename__ = "game_sessions" id = db.Column(db.Integer(), primary_key=True) chat_id = db.Column(db.Integer(), nullable=False) questions = db.Column(ARRAY(db.Integer()), nullable=False) last_question_id = db.Column(db.Integer(), nullable=False) is_finished = db.Column(db.Boolean(), nullable=False) # todo: add constraint
class Answer(db.Model): __tablename__ = "answers" id = db.Column(db.Integer(), primary_key=True) question_id = db.Column(db.Integer(), db.ForeignKey("questions.id"), nullable=False) title = db.Column(db.String(), nullable=False) is_right = db.Column(db.Boolean(), nullable=False)
class Session(db.Model): __tablename__ = "session" id = db.Column(db.Integer, primary_key=True) chat_id = db.Column(db.Integer) status = db.Column( db.Enum(SessionStatus), nullable=False, default=SessionStatus.active, )
class Round(db.Model): __tablename__ = "round" id = db.Column(db.Integer, primary_key=True) session_id = db.Column(db.Integer, db.ForeignKey("session.id")) number = db.Column(db.Integer) status = db.Column( db.Enum(RoundStatus), nullable=False, default=RoundStatus.active, )
class Answer(db.Model): __tablename__ = "answer" id = db.Column(db.Integer, primary_key=True) status = db.Column( db.Enum(AnswerStatus), nullable=False, default=AnswerStatus.correct, ) rq_id = db.Column(db.Integer, db.ForeignKey(RoundQuestion.id)) user_id = db.Column(db.Integer, db.ForeignKey(User.user_id)) created_at = db.Column(db.DateTime, default=datetime.datetime.now)
class RoundQuestion(db.Model): __tablename__ = "round_question" id = db.Column(db.Integer, primary_key=True) status = db.Column( db.Enum(RoundQuestionStatus), nullable=False, default=RoundQuestionStatus.active, ) round_id = db.Column(db.Integer, db.ForeignKey("round.id")) question_id = db.Column(db.Integer, db.ForeignKey("question.id")) created_at = db.Column(db.DateTime)
class SessionScores(db.Model): __tablename__ = "session_scores" id = db.Column(db.Integer(), primary_key=True) session_id = db.Column(db.Integer(), db.ForeignKey("game_sessions.id", ondelete='CASCADE'), nullable=False) user_id = db.Column(db.Integer(), db.ForeignKey("users.user_id", ondelete='CASCADE'), nullable=False) score = db.Column(db.Integer(), nullable=False)
class Airport(db.Model, DCConverter): __tablename__ = "airports" airport_code = db.Column(db.String(3), primary_key=True) airport_name = db.Column(db.Text(), nullable=False) city = db.Column(db.Text(), nullable=False) longitude = db.Column(db.Float(), nullable=False) latitude = db.Column(db.Float(), nullable=False) timezone = db.Column(db.Text(), nullable=False) def to_dc(self) -> "AirportDC": from app.avia.schemas import AirportDC a = 5 return AirportDC.Schema().load(self.__values__)
class User(db.Model): __tablename__ = "user" user_id = db.Column(db.Integer, primary_key=True)
class Flight(db.Model, DCConverter): __tablename__ = "flights" flight_id = db.Column(db.Integer(), primary_key=True) flight_no = db.Column(db.String(6), nullable=False) scheduled_departure = db.Column(db.DateTime(timezone=True), nullable=False) scheduled_arrival = db.Column(db.DateTime(timezone=True), nullable=False) departure_airport = db.Column(db.String(3), db.ForeignKey("airports.airport_code"), nullable=False) arrival_airport = db.Column(db.String(3), db.ForeignKey("airports.airport_code"), nullable=False) status = db.Column(db.String(20), nullable=False) aircraft_code = db.Column(db.String(3), nullable=False) actual_departure = db.Column(db.DateTime(timezone=True), nullable=True) actual_arrival = db.Column(db.DateTime(timezone=True), nullable=True) def __init__(self, **kw): super().__init__(**kw) self._departure_airport_info: Optional[Airport] = None self._arrival_airport_info: Optional[Airport] = None def to_dc(self) -> "FlightDC": from app.avia.schemas import FlightDC flight = FlightDC.Schema().load({ **self.__values__, "scheduled_departure": self.scheduled_departure.isoformat(), "scheduled_arrival": self.scheduled_arrival.isoformat(), "actual_departure": None if self.scheduled_arrival is None else self.actual_departure.isoformat(), "actual_arrival": None if self.actual_arrival is None else self.actual_arrival.isoformat(), "departure_airport_info": None if self._departure_airport_info is None else self._departure_airport_info.__values__, "arrival_airport_info": None if self._arrival_airport_info is None else self._arrival_airport_info.__values__, }) return flight @property def departure_airport_info(self) -> Optional[Airport]: return self @departure_airport_info.setter def departure_airport_info(self, airport: Optional[Airport]): self._departure_airport_info = airport @property def arrival_airport_info(self) -> Optional[Airport]: return self @arrival_airport_info.setter def arrival_airport_info(self, airport: Optional[Airport]): self._arrival_airport_info = airport
class Question(db.Model): __tablename__ = "questions" id = db.Column(db.Integer(), primary_key=True) theme = db.Column(db.String(50), nullable=False) title = db.Column(db.String(), nullable=False)
class UserSession(db.Model): __tablename__ = "user_session" user_id = db.Column(db.Integer, db.ForeignKey("user.user_id")) session_id = db.Column(db.Integer, db.ForeignKey("session.id")) score = db.Column(db.Integer)
class ThemeRound(db.Model): __tablename__ = "theme_round" theme_id = db.Column(db.Integer, db.ForeignKey("theme.id")) round_id = db.Column(db.Integer, db.ForeignKey("round.id"))
class Theme(db.Model): __tablename__ = "theme" id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String)
class Session(db.Model): __tablename__ = "session" id = db.Column(db.Integer, primary_key=True) chat_id = db.Column(db.Integer) status = db.Column(db.Integer)