updated first commit
This commit is contained in:
48
app/models/group.py
Normal file
48
app/models/group.py
Normal file
@@ -0,0 +1,48 @@
|
||||
"""
|
||||
Group model for managing collections of players
|
||||
"""
|
||||
|
||||
from app.extensions import db
|
||||
|
||||
# Association table for many-to-many relationship between Group and Player
|
||||
group_player = db.Table('group_player',
|
||||
db.Column('group_id', db.Integer, db.ForeignKey('group.id'), primary_key=True),
|
||||
db.Column('player_id', db.Integer, db.ForeignKey('player.id'), primary_key=True)
|
||||
)
|
||||
|
||||
class Group(db.Model):
|
||||
"""Group model for managing collections of players"""
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(100), nullable=False, unique=True, index=True)
|
||||
description = db.Column(db.Text, nullable=True)
|
||||
playlist_version = db.Column(db.Integer, default=0)
|
||||
created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
|
||||
is_active = db.Column(db.Boolean, default=True)
|
||||
|
||||
# Relationships
|
||||
players = db.relationship('Player', secondary=group_player, backref='groups')
|
||||
|
||||
def increment_playlist_version(self):
|
||||
"""Increment playlist version for all players in group"""
|
||||
self.playlist_version += 1
|
||||
for player in self.players:
|
||||
player.increment_playlist_version()
|
||||
db.session.commit()
|
||||
|
||||
@property
|
||||
def player_count(self):
|
||||
"""Get the number of players in this group"""
|
||||
return len(self.players)
|
||||
|
||||
def get_content(self):
|
||||
"""Get all content from players in this group"""
|
||||
from app.models.content import Content
|
||||
if not self.players:
|
||||
return []
|
||||
|
||||
player_ids = [player.id for player in self.players]
|
||||
return Content.query.filter(Content.player_id.in_(player_ids)).order_by(Content.position).all()
|
||||
|
||||
def __repr__(self):
|
||||
return f'<Group {self.name} ({self.player_count} players)>'
|
||||
Reference in New Issue
Block a user