from extensions import db from flask_bcrypt import Bcrypt from flask_login import UserMixin bcrypt = Bcrypt() 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(80), unique=True, nullable=False) hostname = db.Column(db.String(120), unique=True, nullable=False) password = db.Column(db.String(120), nullable=False) quickconnect_password = db.Column(db.String(120), nullable=False) 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') # 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...