From b8f1fee102fca8e24a40ef0052e8ebfd4c932798 Mon Sep 17 00:00:00 2001 From: "Troll (Hermes Agent)" Date: Fri, 31 Jul 2026 21:47:45 +0000 Subject: [PATCH] Add delete request button to admin dashboard with confirmation and file cleanup --- app.py | 31 ++++++++++++++++++++++++++++++- models.py | 5 +++++ templates/admin/dashboard.html | 7 ++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index 1f27e26..faa64d0 100644 --- a/app.py +++ b/app.py @@ -8,7 +8,7 @@ from flask import Flask, request, render_template, redirect, url_for, flash, ses from werkzeug.utils import secure_filename from config import Config -from models import init_db, close_db, create_request, get_request_by_id, get_request_by_token, list_requests, update_request, now_utc +from models import init_db, close_db, create_request, get_request_by_id, get_request_by_token, list_requests, update_request, now_utc, delete_request app = Flask(__name__) app.config.from_object(Config) @@ -263,6 +263,35 @@ def admin_request(rid): return render_template('admin/request.html', req=req, statuses=STATUS_LABELS, file_exists=file_exists, basename=basename) +@app.route('/admin/request//delete', methods=['POST']) +def admin_delete_request(rid): + redir = require_admin() + if redir: + return redir + req = get_request_by_id(rid) + if not req: + abort(404) + + # Delete uploaded files if they exist + for field in ('song_a_path', 'song_b_path'): + path = req.get(field) + if path and Path(path).exists(): + try: + Path(path).unlink() + except OSError: + pass + # Remove empty upload directory + upload_dir = Path(current_app.config['UPLOAD_FOLDER']) / str(rid) + if upload_dir.exists(): + try: + upload_dir.rmdir() + except OSError: + pass + + delete_request(rid) + flash(f'Request #{rid} deleted.', 'success') + return redirect(url_for('admin_dashboard')) + # ---------------- init ---------------- @app.cli.command('init-db') diff --git a/models.py b/models.py index 7a5a1e3..9148e0a 100644 --- a/models.py +++ b/models.py @@ -93,3 +93,8 @@ def update_request(request_id, **fields): vals = list(fields.values()) + [request_id] db.execute(f'UPDATE requests SET {cols} WHERE id = ?', vals) db.commit() + +def delete_request(request_id): + db = get_db() + db.execute('DELETE FROM requests WHERE id = ?', (request_id,)) + db.commit() diff --git a/templates/admin/dashboard.html b/templates/admin/dashboard.html index 0ba6430..e28ff78 100644 --- a/templates/admin/dashboard.html +++ b/templates/admin/dashboard.html @@ -21,6 +21,7 @@ tr:hover{background:#2d3748} .pending,.prompt_ready{background:#60a5fa;color:#000} .songs_uploaded{background:#a78bfa;color:#000} .actions a{color:#93c5fd;text-decoration:none;margin-right:.8rem} +.actions button.delete{background:transparent;color:#f87171;border:none;padding:0;cursor:pointer;font:inherit;text-decoration:none;margin-right:.8rem} .logout{float:right;color:#f87171;text-decoration:none} .flash{padding:.8rem;background:#064e3b;border-radius:.5rem;margin-bottom:1rem} .flash.error{background:#450a0a} @@ -65,7 +66,11 @@ tr:hover{background:#2d3748} {{ r.style_genre or '-' }} {{ statuses[r.status] }} {% if r.customer_approved != 'none' %}{{ r.customer_approved.upper() }}{% else %}-{% endif %} -Open +Open +
+ +
+ {% endfor %} {% if not requests %}