68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""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
|
|
]
|