class Subject(Alchemy.Model): __tablename__ = 'subject' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) link = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) source = Alchemy.Column( Alchemy.String, nullable=False, ) orientation = Alchemy.Column( Alchemy.Enum(Orientation), nullable=False, index=True, ) option_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('option.id', ondelete='cascade'), nullable=False, index=True, ) tasks = Alchemy.relationship( 'Task', backref='subject', passive_deletes=True, )
class Setting(Alchemy.Model): NAME_CHOSE_PERIOD = 'choose-period' __tablename__ = 'setting' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) name = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) value = Alchemy.Column( Alchemy.String, nullable=False, ) @staticmethod @lru_cache(maxsize=None) def get(name): value = Setting.query \ .filter(Setting.name == name) \ .one().value return { Setting.NAME_CHOSE_PERIOD: int, }[name](value)
class Mark(Alchemy.Model): __tablename__ = 'mark' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) type = Alchemy.Column( Alchemy.Enum(Type), nullable=False, index=True, ) time_stamp = Alchemy.Column( Alchemy.DateTime, nullable=False, default=datetime.utcnow, server_default=Alchemy.func.now(), ) task_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('task.id', ondelete='cascade'), nullable=False, index=True, ) session_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('session.id', ondelete='cascade'), nullable=False, index=True, )
class Task(Alchemy.Model): __tablename__ = 'task' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) label = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) active = Alchemy.Column( Alchemy.Boolean, nullable=False, default=True, index=True, ) time_stamp = Alchemy.Column( Alchemy.DateTime, nullable=False, default=datetime.utcnow, server_default=Alchemy.func.now(), index=True, ) subject_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('subject.id', ondelete='cascade'), nullable=False, index=True, ) options = Alchemy.relationship( 'Option', secondary='task_option', ) effects = Alchemy.relationship( 'Effect', secondary='task_effect', ) answers = Alchemy.relationship( 'Answer', backref='task', passive_deletes=True, ) marks = Alchemy.relationship( 'Mark', backref='task', passive_deletes=True, )
class Session(Alchemy.Model): __tablename__ = 'session' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) user_device = Alchemy.Column( Alchemy.Enum(Device), nullable=False, ) user_digest = Alchemy.Column( Alchemy.String, nullable=False, ) user_agent = Alchemy.Column( Alchemy.String, nullable=False, ) user_ip = Alchemy.Column( Alchemy.String, nullable=False, ) token = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) time_stamp = Alchemy.Column( Alchemy.DateTime, nullable=False, default=datetime.utcnow, server_default=Alchemy.func.now(), index=True, ) account_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('account.id', ondelete='cascade'), nullable=False, index=True, ) answers = Alchemy.relationship( 'Answer', backref='session', passive_deletes=True, ) marks = Alchemy.relationship( 'Mark', backref='session', passive_deletes=True, ) shares = Alchemy.relationship( 'Share', backref='session', passive_deletes=True, )
class Share(Alchemy.Model): __tablename__ = 'share' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) media = Alchemy.Column( Alchemy.Enum(Media), nullable=False, index=True, ) session_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('session.id', ondelete='cascade'), nullable=False, index=True, )
class Effect(Alchemy.Model): __tablename__ = 'effect' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) name = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) shader = Alchemy.Column( Alchemy.String, nullable=False, ) uniform = Alchemy.Column( Alchemy.String, nullable=False, )
class Option(Alchemy.Model): __tablename__ = 'option' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) name = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) description = Alchemy.Column( Alchemy.String, nullable=False, ) link = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) source = Alchemy.Column( Alchemy.String, nullable=False, ) subjects = Alchemy.relationship( 'Subject', backref='option', passive_deletes=True, ) answers = Alchemy.relationship( 'Answer', backref='option', passive_deletes=True, )
class Account(Alchemy.Model): __tablename__ = 'account' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) uuid = Alchemy.Column( Alchemy.String, nullable=False, unique=True, ) alias = Alchemy.Column( Alchemy.String, nullable=False, index=True, ) score = Alchemy.Column( Alchemy.Integer, nullable=False, default=0, index=True, ) freebie = Alchemy.Column( Alchemy.Integer, nullable=False, default=0, ) factor = Alchemy.Column( Alchemy.Integer, nullable=False, default=1, ) time_stamp = Alchemy.Column( Alchemy.DateTime, nullable=False, default=datetime.utcnow, server_default=Alchemy.func.now(), ) sessions = Alchemy.relationship( 'Session', backref='account', passive_deletes=True, )
class Answer(Alchemy.Model): __tablename__ = 'answer' id = Alchemy.Column( Alchemy.Integer, nullable=False, primary_key=True, ) result = Alchemy.Column( Alchemy.Boolean, nullable=False, index=True, ) time_stamp = Alchemy.Column( Alchemy.DateTime, nullable=False, default=datetime.utcnow, server_default=Alchemy.func.now(), index=True, ) task_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('task.id', ondelete='cascade'), nullable=False, index=True, ) option_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('option.id', ondelete='cascade'), index=True, ) session_id = Alchemy.Column( Alchemy.Integer, Alchemy.ForeignKey('session.id', ondelete='cascade'), nullable=False, index=True, )
backref='task', passive_deletes=True, ) marks = Alchemy.relationship( 'Mark', backref='task', passive_deletes=True, ) Alchemy.Table( 'task_option', Alchemy.Column( 'task_id', Alchemy.Integer, Alchemy.ForeignKey('task.id', ondelete='cascade'), nullable=False, primary_key=True, ), Alchemy.Column( 'option_id', Alchemy.Integer, Alchemy.ForeignKey('option.id', ondelete='cascade'), nullable=False, primary_key=True, ), ) Alchemy.Table( 'task_effect', Alchemy.Column(