"""Tryout event for player evaluations and team formation.""" from app.extensions import db from app.models._associations import tryout_coaches, tryout_managers from app.time_utils import utc_now_naive class Tryout(db.Model): """Tryout event for player evaluations and team formation.""" __tablename__ = 'tryouts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False) description = db.Column(db.Text, nullable=True) game = db.Column(db.String(50), nullable=False) date = db.Column(db.Date, nullable=False) end_date = db.Column(db.Date, nullable=True) location = db.Column(db.String(200), nullable=True) status = db.Column(db.String(20), default='upcoming') max_players = db.Column(db.Integer, nullable=True) created_by = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) target_org_team_id = db.Column(db.Integer, db.ForeignKey('org_teams.id'), nullable=True) manager_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True) # deprecated, kept for migration coach_id = db.Column( db.Integer, db.ForeignKey('users.id'), nullable=True ) # deprecated, kept for migration created_at = db.Column(db.DateTime, default=utc_now_naive) creator = db.relationship('User', foreign_keys=[created_by], backref='created_tryouts') manager = db.relationship('User', foreign_keys=[manager_id], backref='managed_tryouts') # deprecated coach = db.relationship('User', foreign_keys=[coach_id], backref='_deprecated_coached_tryouts') coaches = db.relationship('User', secondary=tryout_coaches, backref='coached_tryouts') managers = db.relationship('User', secondary=tryout_managers, backref='managed_tryouts_m2m') registrations = db.relationship('TryoutRegistration', backref='tryout', lazy='dynamic') evaluations = db.relationship('Evaluation', backref='tryout', lazy='dynamic') teams = db.relationship('Team', backref='tryout', lazy='dynamic') target_org_team = db.relationship( 'OrgTeam', backref='tryouts', foreign_keys=[target_org_team_id] ) @property def is_ended(self): """Tryout is considered ended after its end_date passes. Falls back to date if end_date is not set.""" from datetime import date as date_type today = date_type.today() if self.end_date is not None: return self.end_date < today return self.date < today def get_managers(self): """Managers attached to this tryout, both legacy and many-to-many.""" manager_list = list(self.managers) if not manager_list and self.manager: return [self.manager] return manager_list def get_coaches(self): """Coaches attached to this tryout, both legacy and many-to-many.""" coach_list = list(self.coaches) if not coach_list and self.coach: return [self.coach] return coach_list