class LessonStatus(Table): _name = 'lesson_status' _schema = [ Column('lesson', ForeignKey('lesson')), Column('users', ForeignKey('users')), Column('status', String(20)), ]
class LiveQuizAnsware(Table): _name = 'live_quiz_answare' _schema = [ Column('live_quiz', ForeignKey('live_quiz')), Column('question', ForeignKey('question')), Column('answare', CodeString(5000)), ]
class ExerciseStatus(Table): _name = 'exercise_status' _schema = [ Column('exercise', ForeignKey('exercise')), Column('users', ForeignKey('users')), Column('status', String(20)), ]
class Absence(Table): _name = 'absence' _schema = [ Column('lesson', ForeignKey('lesson')), Column('users', ForeignKey('users')), Column('absent', Boolean(), default=True), ]
class LessonFeedback(Table): _name = 'lesson_feedback' _schema = [ Column('users', ForeignKey('users')), Column('lesson', ForeignKey('lesson')), Column('feedback', String(5000)), ]
class QuizQuestions(Table): _name = 'quiz_questions' _schema = [ Column('quiz', ForeignKey('quiz')), Column('question', ForeignKey('question')), Column('question_order', Integer(), default=0), ]
class ExerciseAnsware(Table): _name = 'lesson_status' _schema = [ Column('exercise', ForeignKey('exercise')), Column('users', ForeignKey('users')), Column('answare', CodeString(5000)), Column('status', String(20)), ]
class EventSponsor(Table): _name = 'event_sponsor' _schema = [ Column('order_number', Integer()), Column('event', ForeignKey('event')), Column('sponsor', ForeignKey('sponsor')), Column('rank', String(255)), ]
class UserReview(Table): _name = 'user_review' _schema = [ Column('users', ForeignKey('users')), Column('reviewer', ForeignKey('users')), Column('score', Integer()), ] _unique = ['users', 'reviewer']
class QuestionAnsware(Table): _name = 'question_answare' _schema = [ Column('users', ForeignKey('users')), Column('question', ForeignKey('question')), Column('answare', CodeString(5000)), ] _unique = ['users', 'question']
class LiveQuizQuestion(Table): _name = 'live_quiz_questions' _schema = [ Column('live_quiz', ForeignKey('live_quiz')), Column('question', ForeignKey('question')), Column('question_order', Integer(), default=0), ] _unique = ['live_quiz', 'question_order']
def _schema(cls): return [ Column('users', ForeignKey('users')), Column(cls._fk_col, ForeignKey(cls._fk_col)), Column('progress', Integer(), default=0), Column('score', Integer(), default=-1), Column('comment', CodeString(1000), required=False, default=''), Column('status', String(50), default='NotStarted'), ]
def _schema(cls): return [ Column('users', ForeignKey('users')), Column(cls._fk_col, ForeignKey(cls._fk_col)), Column('question', ForeignKey('question')), Column('answer', CodeString(5000)), Column('comment', CodeString(1000), required=False, default=''), Column('score', Integer(), default=-1), ]
class EventMeetings(Table): _name = 'event_meetings' _schema = [ Column('order_number', Integer()), Column('event', ForeignKey('event')), Column('lesson', ForeignKey('lesson')), Column('date', DateTime(), default=datetime.utcnow), Column('lesson_active', Boolean(), default=False), ]
class Feedback(Table): _name = 'feedback' _schema = [ Column('lesson_review', String(10000)), Column('teacher_review', String(10000)), Column('material', Integer()), Column('teacher', ForeignKey('users')), Column('users', ForeignKey('users')), ]
class LessonFeedbackAnswer(Table): _name = 'lesson_feedback_answer' _schema = [ Column('id', Integer, primary_key=True), Column('author', ForeignKey('users')), Column('answers', CodeString(10000)), Column('question', ForeignKey('lesson_feedback_question')), Column('lesson', ForeignKey('lesson')) ]
class ExerciseAnsware(Table): _name = 'exercise_answare' _schema = [ Column('exercise', ForeignKey('exercise')), Column('users', ForeignKey('users')), Column('answare', CodeString(5000)), Column('first_answare', CodeString(5000), default=""), Column('status', String(20)), ]
class Exercise(Table): _name = 'exercise' _schema = [ Column('id', Integer, primary_key=True), Column('title', String(255)), Column('task', CodeString(10000)), Column('possible_answare', CodeString(1000), required=False), Column('author', ForeignKey('users'), default=1), Column('time_created', DateTime(), default=datetime.utcnow), Column('lesson', ForeignKey('lesson')), ]
class AbsenceMeta(Table): _name = 'absence_meta' _schema = [ Column('id', Integer, primary_key=True), Column('lesson', ForeignKey('lesson')), Column('code', String(10)), Column('active', Boolean(), default=True), Column('users', ForeignKey('users')), Column('time_created', DateTime(), default=datetime.utcnow), Column('time_ended', DateTime()), ]
class Lesson(Table): _name = 'lesson' _schema = [ Column('id', Integer, primary_key=True), Column('title', String(255)), Column('description', String(10000)), Column('author', ForeignKey('users'), default=1), Column('file', String(255), required=False), Column('time_created', DateTime(), default=datetime.utcnow), Column('active', Boolean(), default=False), Column('quiz', ForeignKey('quiz'), required=False), Column('live_quiz', ForeignKey('live_quiz'), required=False), ]
class EventUsers(Table): _name = 'event_users' _soft_restricted_keys = ['score', 'notes'] _schema = [ Column('event', ForeignKey('event')), Column('users', ForeignKey('users')), Column('confirmation', String(10), default='noans'), Column('accepted', Boolean(), default=False), Column('bring_power_cord', Boolean(), default=False), Column('attend_weekly', Boolean(), default=False), Column('notes', String(5000), default=''), Column('score', Float(), default=0, required=False), Column('i_helped', Boolean(), default=False), Column('helped', String(5000), required=False), ]
class Feedback(Table): _name = 'feedback' _schema = [ Column('lesson_review', String(10000)), Column('teacher_review', String(10000)), Column('material', Integer()), Column('teacher', ForeignKey('users')), Column('users', ForeignKey('users')), # O tym czy dobrze było zorganizowane # Czy polecilbys nasze warsztaty znajomym # Czy moglibyśmy lepiej się reklamować # Czy jakieś zagadnienia były za mało poruszone Albo za dużo # Czego brakowało # https://docs.google.com/forms/d/e/1FAIpQLSctlgSwoKQoB_3Hc5bfu3RYLbz0TNKQmg23jnc8MJ3wwRJn7g/viewform ]
class Task(Model): """Representation of a Task, this is a Database Object.""" __tablename__ = "task" __database__ = Database.database __metadata__ = Database.metadata id = BigInteger(primary_key=True, index=True) player = ForeignKey(Player) completed = Boolean(default=False) _task_type = Integer() completion_date = DateTime() @property def task_type(self) -> TaskType: """Get the type of the task.""" return TaskType(self._task_type) @task_type.setter def task_type(self, value: TaskType) -> None: self._task_type = value.value @property async def embed(self) -> Embed: """Get the embed representing the task.""" return Embed(title=self.task_type.name, description=f"Completes at {self.completion_date}", colour=self.task_type.colour)
class Feedback(Table): _name = 'seat' _schema = [ Column('id', Integer, primary_key=True), Column('row', String(255)), Column('number', String(10000)), Column('users', ForeignKey('users')), ]
class Seat(Table): _name = 'seat' _schema = [ Column('id', Integer, primary_key=True), Column('row', String(255)), Column('number', Integer()), Column('users', ForeignKey('users'), unique=True), Column('i_need_help', Boolean(), default=False), ]
class AbsenceMeta(Table): _name = 'absence_meta' _schema = [ Column('id', Integer, primary_key=True), Column('row', String(255)), Column('code', String(10)), Column('active', Boolean(), default=True), Column('users', ForeignKey('users')), ]
class Item(Model): """Representation of an Item, this is a Database Object.""" __tablename__ = "item" __database__ = Database.database __metadata__ = Database.metadata __table_args__ = (UniqueConstraint('owner', 'item_id'),) id: int = Integer(primary_key=True, index=True) item_id: str = String(max_length=4) name: str = String(max_length=50) owner: Player = ForeignKey(Player) value: int = Integer() _rarity: int = Integer() _item_type: int = Integer() @property def embed_field(self) -> dict[str, str]: """Get a embed field that represents the Item""" return { "name": f"`{self.item_id}` | {self.rarity.emoji} {self.name}", "value": f"Value: {self.value} - Type: {self.item_type.name}" } @property async def embed(self) -> Embed: """Get a Embed that represents the Item""" embed = Embed(title=f"{self.rarity.emoji} {self.name}", colour=self.rarity.colour) embed.add_field(name="Item ID", value=f"`{self.item_id}`") embed.add_field(name="Value", value=str(self.value)) bot = ArenaBot.instance owner = bot.get_user(self.owner.id) if owner is None: owner = await bot.fetch_user(self.owner.id) embed.set_author(name=owner.display_name, icon_url=owner.avatar_url) return embed @property def rarity(self) -> Rarity: """Get the rarity of the item.""" return Rarity(self._rarity) @rarity.setter def rarity(self, value: Rarity) -> None: self._rarity = value.value @property def item_type(self) -> ItemType: """Get the type of the item.""" return ItemType(self._item_type) @item_type.setter def item_type(self, value: ItemType) -> None: self._item_type = value.value
class Question(Table): _name = 'question' _schema = [ Column('id', Integer, primary_key=True), Column('question', String(1000)), Column('answares', CodeString(2000), default=''), Column('possible_answare', String(1000), default=''), Column('qtype', String(50), default='plain'), Column('img', String(255), required=False, default=''), Column('users', ForeignKey('users'), default=DEFAULT_USER), Column('time_created', DateTime(), default=datetime.utcnow), ]
class LessonFeedbackQuestion(Table): _name = 'lesson_feedback_question' _schema = [ Column('id', Integer, primary_key=True), Column('author', ForeignKey('users'), default=DEFAULT_USER), Column('type', String(50)), Column('description', String(5000)), Column('answers', CodeString(10000)) ] @classmethod async def get_by_lesson_id(cls, lid): return await cls.get_by_join("lesson_feedback_meta", lesson=lid, id=StringLiteral("question"))
class Quiz(Table): _name = 'quiz' _schema = [ Column('id', Integer, primary_key=True), Column('title', String(255)), Column('description', String(10000)), Column('users', ForeignKey('users'), default=1), Column('time_created', DateTime(), default=datetime.utcnow), ] async def get_question(self, question_order=0): if question_order + 1 >= await self.get_question_amount(): return {'last': True, 'msg': 'That was last question in the quiz.'} qq = await QuizQuestions.get_first_by_many_field_value( quiz=self.id, question_order=question_order) return await Question.get_by_id(qq.question) async def get_question_amount(self): return len(await QuizQuestions.get_by_field_value('quiz', self.id))