class ScenarioUsers(UserMixin, SurrogatePK, Model): """Users belong to groups""" ___tablename___ = "scenario_users" user_id = reference_col("users", nullable=False) user = relationship("User", backref="scenario_users") scenario_id = reference_col("scenarios", nullable=False) scenario = relationship("Scenarios", backref="scenario_users")
class GroupUsers(UserMixin, SurrogatePK, Model): """Users belong to groups""" ___tablename___ = "group_users" user_id = reference_col("users", nullable=False) user = relationship("User", backref="group_users") group_id = reference_col("groups", nullable=False) group = relationship("StudentGroups", backref="group_users")
class ScenarioGroups(UserMixin, SurrogatePK, Model): """Groups associated with scenarios""" __tablename__ = "scenario_groups" group_id = reference_col("groups", nullable=False) group = relationship("StudentGroups", backref="scenario_groups") scenario_id = reference_col("scenarios", nullable=False) scenario = relationship("Scenarios", backref="scenario_groups")
class StudentGroups(UserMixin, SurrogatePK, Model): """"Groupts of Users""" __tablename__ = "groups" name = Column(db.String(40), unique=True, nullable=False) owner_id = reference_col("users", nullable=False) owner = relationship("User", backref="groups") code = Column( db.String(8), unique=True, nullable=True, default=generate_registration_code() ) hidden = Column(db.Boolean(), nullable=False, default=False) users = relationship("GroupUsers", backref="groups", cascade="all, delete-orphan")
class Responses(UserMixin, SurrogatePK, Model): """Student responses to scenario questions""" __tablename__ = "responses" user_id = reference_col("users", nullable=False) user = relationship("User", backref="responses") scenario_id = reference_col("scenarios", nullable=False) scenario = relationship("Scenarios", backref="responses") question = Column(db.Integer, default=0, nullable=False) student_response = Column(db.String(40), unique=False, nullable=True) #correct = Column(db.Boolean(), default=False) points = Column(db.Integer, default=0, nullable=False) response_time = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) attempt = Column(db.Integer, default=0, nullable=False)
class Scenarios(UserMixin, SurrogatePK, Model): """An exercise """ __tablename__ = "scenarios" name = Column(db.String(40), unique=False, nullable=False) description = Column(db.String(80), unique=False, nullable=True) owner_id = reference_col("users", nullable=False) owner = relationship("User", backref="scenarios", lazy="subquery") created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) status = Column(db.Integer, default=0, nullable=False) attempt = Column(db.Integer, default=0, nullable=False, server_default="0") resps = relationship("Responses", backref="scenarios", cascade="all, delete-orphan") def __repr__(self): """Represent instance as a unique string.""" return f"<Scenario({self.name!r})>"
class Scenarios(UserMixin, SurrogatePK, Model): """An exercise """ __tablename__ = "scenarios" name = Column(db.String(40), unique=False, nullable=False) description = Column(db.String(80), unique=False, nullable=True) owner_id = reference_col("users", nullable=False) owner = relationship("User", backref="scenarios") created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) status = Column(db.Integer, default=0, nullable=False)