class Users(db.Model, ModelMixin, UserMixin): __tablename__ = 'users' name = db.Column(db.String(100), unique=False, nullable=False) username = db.Column(db.String, unique=True, nullable=False) email = db.Column(db.String(100), unique=True) password = db.Column(db.String) role = db.Column(db.Enum(RolesEnum), nullable=False) sent_authentication_to_email = db.Column(db.Boolean, default=False) last_auth_email_destination = db.Column(db.String(100)) accepted_terms = db.Column(db.Boolean, default=False) chat_id = db.Column(db.String) def __repr__(self): return '<User %r>' % self.username def get_id(self): """ Method used by Flask-Login to be used on user_loader callback. We want to use Argonath Session Token here. :return: """ return self.username def get_role(self): return self.role
class BannedStudents(db.Model, ModelMixin): __tablename__ = 'banned_students' name = db.Column(db.String(100), unique=True, nullable=False) ist_id = db.Column(db.String(10), unique=True, nullable=False, index=True) email = db.Column(db.String(100)) def __repr__(self): return 'Name: {} | IST id: {}'.format(self.name, self.ist_id)
class Speakers(db.Model, ModelMixin): __tablename__ = 'speakers' name = db.Column(db.String(100), unique=True, nullable=False) company = db.Column(db.String(100)) company_link = db.Column(db.String(100)) position = db.Column(db.String(100)) country = db.Column(db.String(100)) bio = db.Column(db.String(300)) linkedin_url = db.Column(db.String(100)) youtube_url = db.Column(db.String(100)) website_url = db.Column(db.String(100)) spotlight = db.Column(db.Boolean, default=False) activities = relationship( "Activities", secondary="speaker_activities", secondaryjoin=sql.and_(SpeakerActivities.activity_id == Activities.id)) def __repr__(self): return 'Name: {}'.format(self.name)
class Logs(db.Model): __tablename__ = 'logs' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.String(20)) entrypoint = db.Column(db.String(200), nullable=False) create_date = db.Column(db.DateTime, server_default=db.func.now()) def __repr__(self): return 'Id: {}'.format(self.id)
class Dishes(db.Model, ModelMixin): __tablename__ = 'dishes' name = db.Column(db.String(100), nullable=False) description = db.Column(db.String(300)) type = db.Column(db.Enum(DishTypeEnum), nullable=False) meal_id = db.Column(db.Integer, db.ForeignKey('meals.id', ondelete='CASCADE'), index=True) def __repr__(self): return 'Dish: {}'.format(self.name)
class Rewards(db.Model, ModelMixin): __tablename__ = 'rewards' name = db.Column(db.String(100), unique=True, nullable=False) description = db.Column(db.String(300)) link = db.Column(db.String(100)) quantity = db.Column(db.Integer) def __repr__(self): return 'Name: {}'.format(self.name)
class Meals(db.Model, ModelMixin): __tablename__ = 'meals' location = db.Column(db.String(100), default="Instituto Superior Técnico") day = db.Column(db.String(20), nullable=False) time = db.Column(db.String(10)) registration_day = db.Column(db.String(20), nullable=False) registration_time = db.Column(db.String(10)) type = db.Column(db.Enum(MealTypeEnum), nullable=False) def __repr__(self): return 'Meal: {} | Day: {}'.format(self.type.name, self.day)
class Colaborators(db.Model, ModelMixin): __tablename__ = 'colaborators' name = db.Column(db.String(100), unique=True, nullable=False) ist_id = db.Column(db.String(10)) email = db.Column(db.String(100)) team = relationship('Teams', back_populates="members", uselist=False) team_id = db.Column(db.Integer, db.ForeignKey('teams.id')) linkedin_url = db.Column(db.String(150)) def __repr__(self): return 'Name: {} | Team: {}'.format(self.name, self.team)
class Companies(db.Model, ModelMixin): __tablename__ = 'companies' name = db.Column(db.String(100), unique=True) email = db.Column(db.String(100)) link = db.Column(db.String(100)) business_area = db.Column(db.String(100)) chat_id = db.Column(db.String) chat_code = db.Column(db.String) partnership_tier = db.Column(db.String(20)) show_in_website = db.Column(db.Boolean, default=True) cvs_access = db.Column(db.Boolean, default=False) evf_username = db.Column(db.String) evf_password = db.Column(db.String) activities = relationship( "Activities", secondary="company_activities", order_by="Activities.day, Activities.time", secondaryjoin=sql.and_(CompanyActivities.activity_id == Activities.id, Activities.event_id == Events.id, Events.default == True)) dishes = relationship( "Dishes", secondary="company_dishes", secondaryjoin=sql.and_(CompanyDishes.dish_id == Dishes.id)) meals = relationship( "Meals", secondary="company_meals", secondaryjoin=sql.and_(CompanyMeals.meal_id == Meals.id)) tags = relationship( "Tags", secondary="companies_tags", secondaryjoin=sql.and_(CompaniesTags.tag_id == Tags.id)) users = relationship("CompanyUsers", back_populates='company', lazy='dynamic', cascade="all,delete") def __repr__(self): return 'Name: {}'.format(self.name)
class Tags(db.Model, ModelMixin): __tablename__ = 'tags' name = db.Column(db.String(100), unique=True, nullable=False) def __repr__(self): return 'Name: {}'.format(self.name)
class Squads(db.Model, ModelMixin): __tablename__ = 'squads' name = db.Column(db.String(100), unique=True, nullable=False) cry = db.Column(db.String(100)) members = relationship("Students", back_populates='squad', lazy='dynamic', order_by="Students.total_points") captain_ist_id = db.Column(db.String(10), unique=True, nullable=False) daily_points = db.Column(db.Integer, default=0) total_points = db.Column(db.Integer, default=0) def __repr__(self): return 'Name: {}'.format(self.name)
class StudentLogins(db.Model, ModelMixin): __tablename__ = 'student_logins' student_id = db.Column(db.Integer, db.ForeignKey('students.id', ondelete='CASCADE'), index=True) date = db.Column(db.String(30)) def __repr__(self): return 'Date: {}'.format(self.date)
class ActivityCodes(db.Model, ModelMixin): __tablename__ = 'activity_codes' code = db.Column(db.String(16), unique=True, nullable=False, index=True) activity = relationship('Activities') activity_id = db.Column(db.Integer, db.ForeignKey('activities.id', ondelete='CASCADE')) def __repr__(self): return 'Code: {}'.format(self.code)
class Teams(db.Model, ModelMixin): __tablename__ = 'teams' name = db.Column(db.String(100), unique=True) description = db.Column(db.String(300)) website_priority = db.Column( db.Integer(), default=0) # for sorting the teams in the website members = relationship("Colaborators", back_populates='team', lazy='dynamic', cascade="all,delete", order_by="Colaborators.name") event = relationship('Events', back_populates="teams", uselist=False) event_id = db.Column(db.Integer, db.ForeignKey('events.id')) def __repr__(self): return 'Name: {}'.format(self.name)
class Students(db.Model, ModelMixin): __tablename__ = 'students' name = db.Column(db.String(100), nullable=False) ist_id = db.Column(db.String(10), unique=True, nullable=False, index=True) photo = db.Column(db.Text()) photo_type = db.Column(db.String(20)) linkedin_url = deferred(db.Column(db.String(150))) uploaded_cv = deferred(db.Column(db.Boolean, default=False)) level = relationship('Levels') level_id = db.Column(db.Integer, db.ForeignKey('levels.id')) daily_points = db.Column(db.Integer()) total_points = db.Column(db.Integer()) squad_points = db.Column(db.Integer()) referral_code = db.Column(db.String(16), unique=True, nullable=False, index=True) course = db.Column(db.String(10)) entry_year = db.Column(db.String()) user = relationship('Users', cascade="all,delete") user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE')) squad = relationship('Squads', back_populates="members", uselist=False) squad_id = db.Column(db.Integer, db.ForeignKey('squads.id', ondelete='SET NULL')) tags = relationship("Tags", secondary="students_tags", secondaryjoin=sql.and_(StudentsTags.tag_id == Tags.id)) companies = relationship( "Companies", secondary="student_companies", secondaryjoin=sql.and_(StudentCompanies.company_id == Companies.id)) login_dates = relationship("StudentLogins") activities = relationship( "Activities", secondary="student_activities", secondaryjoin=sql.and_(StudentActivities.activity_id == Activities.id)) def is_captain(self): if self.squad: return self.user.username == self.squad.captain_ist_id return False def __repr__(self): return 'Name: {} | IST Id: {}'.format(self.user.name, self.user.username)
class SquadDailyPoints(db.Model, ModelMixin): __tablename__ = 'squad_daily_points' squad_id = db.Column(db.Integer, db.ForeignKey('squads.id', ondelete='CASCADE'), index=True) squad = relationship('Squads') date = db.Column(db.String(30)) points = db.Column(db.Integer()) def __repr__(self): return 'Date: {} Points: {}'.format(self.date, self.points)
class SquadsRewards(db.Model, ModelMixin): __tablename__ = 'squads_rewards' reward_id = db.Column(db.Integer, db.ForeignKey('rewards.id', ondelete='SET NULL')) reward = relationship('Rewards') date = db.Column(db.String(30), unique=True) winner = relationship('Squads') winner_id = db.Column(db.Integer, db.ForeignKey('squads.id', ondelete='SET NULL')) def __repr__(self): return 'Name: {}'.format(self.name)
class Auctions(db.Model, ModelMixin): __tablename__ = 'auctions' name = db.Column(db.String(100), nullable=False) description = db.Column(db.String(300)) closing_date = db.Column(db.String(200)) minimum_value = db.Column(db.Float()) is_open = db.Column(db.Boolean, default=False) bids = relationship("Bids", back_populates='auction', lazy='dynamic', cascade="all,delete") participants = relationship( "Companies", secondary="company_auctions", secondaryjoin=sql.and_(CompanyAuctions.company_id == Companies.id)) def __repr__(self): return 'Name: {}'.format(self.name)
class ActivityTypes(db.Model, ModelMixin): __tablename__ = 'activity_types' name = db.Column(db.String(100), nullable=False) description = db.Column(db.String(300)) price = db.Column(db.Float()) show_in_home = db.Column(db.Boolean, default=True) show_in_schedule = db.Column(db.Boolean, default=True) show_in_app = db.Column(db.Boolean, default=True) event = relationship('Events', back_populates="activity_types", uselist=False) event_id = db.Column(db.Integer, db.ForeignKey('events.id', ondelete='SET NULL')) activities = relationship("Activities", back_populates='activity_type', lazy='dynamic', cascade="all,delete") def __repr__(self): return 'Name: {} | Price: {}'.format(self.name, self.price)
class Activities(db.Model, ModelMixin): __tablename__ = 'activities' name = db.Column(db.String(100), unique=False, nullable=False) description = db.Column(db.String(300)) location = db.Column(db.String(100), default="Instituto Superior Técnico") day = db.Column(db.String(20)) time = db.Column(db.String(10)) end_time = db.Column(db.String(10)) registration_open = db.Column(db.Boolean, default=False) registration_link = db.Column(db.String(100)) activity_type = relationship('ActivityTypes', back_populates="activities", uselist=False) activity_type_id = db.Column(db.Integer, db.ForeignKey('activity_types.id', ondelete='SET NULL')) event = relationship('Events', back_populates="activities", uselist=False) event_id = db.Column(db.Integer, db.ForeignKey('events.id')) chat_id = db.Column(db.String) chat_code = db.Column(db.String) chat_type = db.Column(db.Enum(ActivityChatEnum)) zoom_link = db.Column(db.String) reward_id = db.Column(db.Integer, db.ForeignKey('rewards.id', ondelete='SET NULL')) reward = relationship('Rewards') moderator_id = db.Column(db.Integer, db.ForeignKey('speakers.id', ondelete='SET NULL')) moderator = relationship('Speakers') tags = relationship("Tags", secondary="activities_tags", secondaryjoin=sql.and_(ActivitiesTags.tag_id == Tags.id)) points = db.Column(db.Integer()) quest = db.Column(db.Boolean, default=False) def __repr__(self): return 'Type: {} | Name: {}'.format(self.activity_type.name, self.name)
class CompanyUsers(db.Model, ModelMixin): __tablename__ = 'company_users' company = db.relationship('Companies', back_populates="users", uselist=False) company_id = db.Column(db.Integer, db.ForeignKey('companies.id', ondelete='CASCADE')) post = db.Column(db.String(50)) food_manager = db.Column(db.Boolean, default=False) user = relationship('Users', cascade="all,delete") user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE')) evf_username = db.Column(db.String) evf_password = db.Column(db.String) def __repr__(self): return 'Name: {} | Company: {}'.format(self.user.name, self.company.name)
class Events(db.Model, ModelMixin): __tablename__ = 'events' name = db.Column(db.String(100), nullable=False) start_date = db.Column(db.String(30)) end_date = db.Column(db.String(30)) default = db.Column(db.Boolean, default=False) email = db.Column(db.String(100)) location = db.Column(db.String(100)) facebook_link = db.Column(db.String(100)) facebook_event_link = db.Column(db.String(100)) youtube_link = db.Column(db.String(100)) instagram_link = db.Column(db.String(100)) show_schedule = db.Column(db.Boolean, default=False) show_registrations = db.Column(db.Boolean, default=False) cvs_submission_start = db.Column(db.String(30)) cvs_submission_end = db.Column(db.String(30)) cvs_access_start = db.Column(db.String(30)) cvs_access_end = db.Column(db.String(30)) cvs_purged = db.Column(db.Boolean, default=False) activity_types = relationship("ActivityTypes", back_populates='event', lazy='dynamic', cascade="all,delete", order_by="ActivityTypes.name") activities = relationship("Activities", back_populates='event', lazy='dynamic', cascade="all,delete", order_by="Activities.day, Activities.time") teams = relationship("Teams", back_populates='event', lazy='dynamic', cascade="all,delete", order_by="Teams.website_priority") def __repr__(self): return 'Name: {} | date: {}'.format(self.name, self.start_date)