updated first commit
This commit is contained in:
152
app/routes/group.py
Normal file
152
app/routes/group.py
Normal file
@@ -0,0 +1,152 @@
|
||||
"""
|
||||
Group management routes
|
||||
"""
|
||||
|
||||
from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify
|
||||
from flask_login import login_required
|
||||
from app.models.group import Group
|
||||
from app.models.player import Player
|
||||
from app.utils.group_management import (
|
||||
create_group, edit_group, delete_group,
|
||||
get_group_content, update_group_content_order
|
||||
)
|
||||
from app.routes.admin import admin_required
|
||||
|
||||
bp = Blueprint('group', __name__)
|
||||
|
||||
@bp.route('/')
|
||||
@login_required
|
||||
@admin_required
|
||||
def index():
|
||||
"""List all groups"""
|
||||
groups = Group.query.order_by(Group.name).all()
|
||||
return render_template('group/index.html', groups=groups)
|
||||
|
||||
@bp.route('/create', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def create():
|
||||
"""Create new group"""
|
||||
if request.method == 'POST':
|
||||
name = request.form.get('name', '').strip()
|
||||
description = request.form.get('description', '').strip()
|
||||
player_ids = request.form.getlist('players')
|
||||
|
||||
# Validation
|
||||
if not name:
|
||||
flash('Group name is required.', 'danger')
|
||||
players = Player.query.order_by(Player.username).all()
|
||||
return render_template('group/create.html', players=players)
|
||||
|
||||
# Convert player IDs to integers
|
||||
try:
|
||||
player_ids = [int(pid) for pid in player_ids if pid]
|
||||
except ValueError:
|
||||
flash('Invalid player selection.', 'danger')
|
||||
players = Player.query.order_by(Player.username).all()
|
||||
return render_template('group/create.html', players=players)
|
||||
|
||||
# Create group
|
||||
success, result = create_group(
|
||||
name=name,
|
||||
player_ids=player_ids,
|
||||
description=description if description else None
|
||||
)
|
||||
|
||||
if success:
|
||||
flash(f'Group "{name}" created successfully.', 'success')
|
||||
return redirect(url_for('group.manage', group_id=result.id))
|
||||
else:
|
||||
flash(f'Error creating group: {result}', 'danger')
|
||||
|
||||
players = Player.query.order_by(Player.username).all()
|
||||
return render_template('group/create.html', players=players)
|
||||
|
||||
@bp.route('/<int:group_id>')
|
||||
@login_required
|
||||
@admin_required
|
||||
def manage(group_id):
|
||||
"""Manage group content"""
|
||||
group = Group.query.get_or_404(group_id)
|
||||
content = get_group_content(group_id)
|
||||
|
||||
return render_template('group/manage.html', group=group, content=content)
|
||||
|
||||
@bp.route('/<int:group_id>/edit', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def edit(group_id):
|
||||
"""Edit group"""
|
||||
group = Group.query.get_or_404(group_id)
|
||||
|
||||
if request.method == 'POST':
|
||||
name = request.form.get('name', '').strip()
|
||||
description = request.form.get('description', '').strip()
|
||||
player_ids = request.form.getlist('players')
|
||||
|
||||
# Convert player IDs to integers
|
||||
try:
|
||||
player_ids = [int(pid) for pid in player_ids if pid]
|
||||
except ValueError:
|
||||
flash('Invalid player selection.', 'danger')
|
||||
players = Player.query.order_by(Player.username).all()
|
||||
return render_template('group/edit.html', group=group, players=players)
|
||||
|
||||
# Update group
|
||||
success, result = edit_group(
|
||||
group_id=group_id,
|
||||
name=name if name else None,
|
||||
player_ids=player_ids,
|
||||
description=description
|
||||
)
|
||||
|
||||
if success:
|
||||
flash(f'Group "{result.name}" updated successfully.', 'success')
|
||||
return redirect(url_for('group.manage', group_id=group_id))
|
||||
else:
|
||||
flash(f'Error updating group: {result}', 'danger')
|
||||
|
||||
players = Player.query.order_by(Player.username).all()
|
||||
return render_template('group/edit.html', group=group, players=players)
|
||||
|
||||
@bp.route('/<int:group_id>/delete', methods=['POST'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def delete(group_id):
|
||||
"""Delete group"""
|
||||
group = Group.query.get_or_404(group_id)
|
||||
group_name = group.name
|
||||
|
||||
success, error = delete_group(group_id)
|
||||
|
||||
if success:
|
||||
flash(f'Group "{group_name}" deleted successfully.', 'success')
|
||||
else:
|
||||
flash(f'Error deleting group: {error}', 'danger')
|
||||
|
||||
return redirect(url_for('dashboard.index'))
|
||||
|
||||
@bp.route('/<int:group_id>/fullscreen')
|
||||
@login_required
|
||||
def fullscreen(group_id):
|
||||
"""Group fullscreen view"""
|
||||
group = Group.query.get_or_404(group_id)
|
||||
content = get_group_content(group_id)
|
||||
|
||||
return render_template('group/fullscreen.html', group=group, content=content)
|
||||
|
||||
@bp.route('/<int:group_id>/update_order', methods=['POST'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def update_order(group_id):
|
||||
"""Update content order for group"""
|
||||
if not request.is_json:
|
||||
return jsonify({'success': False, 'error': 'Invalid request format'}), 400
|
||||
|
||||
items = request.json.get('items', [])
|
||||
success, error = update_group_content_order(group_id, items)
|
||||
|
||||
if success:
|
||||
return jsonify({'success': True})
|
||||
else:
|
||||
return jsonify({'success': False, 'error': error}), 500
|
||||
Reference in New Issue
Block a user