"""Persistent organisation team (e.g. Varsity, JV).""" from app.extensions import db from app.models._associations import org_team_coaches, org_team_managers from app.time_utils import utc_now_naive class OrgTeam(db.Model): """Persistent organisation team (e.g. Varsity, JV).""" __tablename__ = 'org_teams' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) created_by = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) created_at = db.Column(db.DateTime, default=utc_now_naive) coach_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True) manager_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True) creator = db.relationship('User', foreign_keys=[created_by]) coaches = db.relationship( 'User', secondary=org_team_coaches, lazy='dynamic', backref=db.backref('coached_org_teams', lazy='dynamic'), ) managers = db.relationship( 'User', secondary=org_team_managers, lazy='dynamic', backref=db.backref('managed_org_teams', lazy='dynamic'), ) coach = db.relationship( 'User', foreign_keys=[coach_id], backref=db.backref('coached_org_team_legacy', uselist=False), viewonly=True, ) manager = db.relationship( 'User', foreign_keys=[manager_id], backref=db.backref('managed_org_team_legacy', uselist=False), viewonly=True, ) def get_coaches(self): coach_list = self.coaches.all() if not coach_list and self.coach: return [self.coach] return coach_list def get_managers(self): manager_list = self.managers.all() if not manager_list and self.manager: return [self.manager] return manager_list @property def players(self): return [tp.player for tp in self.team_players] def get_players_with_status(self): return [ {'player': tp.player, 'status': tp.status, 'position': tp.position} for tp in self.team_players ]