Add delete request button to admin dashboard with confirmation and file cleanup
This commit is contained in:
parent
7ef8779eb7
commit
b8f1fee102
3 changed files with 41 additions and 2 deletions
31
app.py
31
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/<int:rid>/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')
|
||||
|
|
|
|||
Reference in a new issue