from extensions import db from flask_bcrypt import Bcrypt from flask_login import UserMixin import datetime # Add this import bcrypt = Bcrypt() # Add this new model class ServerLog(db.Model): id = db.Column(db.Integer, primary_key=True) action = db.Column(db.String(255), nullable=False) timestamp = db.Column(db.DateTime, default=datetime.datetime.utcnow) def __repr__(self): return f"" class Content(db.Model): id = db.Column(db.Integer, primary_key=True) file_name = db.Column(db.String(120), nullable=False) duration = db.Column(db.Integer, nullable=False) player_id = db.Column(db.Integer, db.ForeignKey('player.id'), nullable=True) class Player(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(100), nullable=False, unique=True) hostname = db.Column(db.String(100), nullable=False) password = db.Column(db.String(200), nullable=False) quickconnect_password = db.Column(db.String(200), nullable=True) # Add this field playlist_version = db.Column(db.Integer, default=0) # Playlist version counter locked_to_group_id = db.Column(db.Integer, db.ForeignKey('group.id'), nullable=True) locked_to_group = db.relationship('Group', foreign_keys=[locked_to_group_id], backref='locked_players') def verify_quickconnect_code(self, code): return bcrypt.check_password_hash(self.quickconnect_password, code) class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) password = db.Column(db.String(120), nullable=False) role = db.Column(db.String(80), nullable=False) theme = db.Column(db.String(80), default='light') def set_password(self, password): self.password = bcrypt.generate_password_hash(password).decode('utf-8') def check_password(self, password): return bcrypt.check_password_hash(self.password, password) @property def is_active(self): return True @property def is_authenticated(self): return True @property def is_anonymous(self): return False def get_id(self): return str(self.id) class Group(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) players = db.relationship('Player', secondary='group_player', backref='groups') playlist_version = db.Column(db.Integer, default=0) # Playlist version counter # 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) ) # other models...