from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # Configurare baza de date SQLite app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///dashboard.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) # Modele pentru baza de date class Player(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), nullable=False) hostname = db.Column(db.String(120), nullable=False) ip = db.Column(db.String(15), nullable=False) password = db.Column(db.String(120), nullable=False) class Group(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True, nullable=False) players = db.relationship('Player', secondary='group_players', backref='groups') group_players = db.Table('group_players', 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 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) group_id = db.Column(db.Integer, db.ForeignKey('group.id'), nullable=True) @app.before_first_request def create_tables(): db.create_all() @app.route('/') def dashboard(): players = Player.query.all() groups = Group.query.all() return render_template('dashboard.html', players=players, groups=groups) @app.route('/add_player', methods=['GET', 'POST']) def add_player(): if request.method == 'POST': username = request.form['username'] hostname = request.form['hostname'] ip = request.form['ip'] password = request.form['password'] new_player = Player(username=username, hostname=hostname, ip=ip, password=password) db.session.add(new_player) db.session.commit() return redirect(url_for('dashboard')) return render_template('add_player.html') @app.route('/add_group', methods=['GET', 'POST']) def add_group(): if request.method == 'POST': group_name = request.form['group_name'] selected_players = request.form.getlist('players') new_group = Group(name=group_name) for player_id in selected_players: player = Player.query.get(int(player_id)) new_group.players.append(player) db.session.add(new_group) db.session.commit() return redirect(url_for('dashboard')) players = Player.query.all() return render_template('add_group.html', players=players) @app.route('/upload_content', methods=['GET', 'POST']) def upload_content(): if request.method == 'POST': target_type = request.form['target_type'] target_id = request.form['target_id'] files = request.files.getlist('files') duration = int(request.form['duration']) for file in files: if target_type == 'player': new_content = Content(file_name=file.filename, duration=duration, player_id=int(target_id)) elif target_type == 'group': new_content = Content(file_name=file.filename, duration=duration, group_id=int(target_id)) db.session.add(new_content) db.session.commit() return redirect(url_for('dashboard')) players = Player.query.all() groups = Group.query.all() return render_template('upload_content.html', players=players, groups=groups) @app.route('/player/') def player_page(player_id): player = Player.query.get_or_404(player_id) content = Content.query.filter_by(player_id=player_id).all() return render_template('player_page.html', player=player, content=content) if __name__ == '__main__': app.run(debug=True)