From add528fb8036de4ba023e70e960e5783a8737409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Wed, 26 Apr 2023 19:20:21 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=B6schung=20eigener=20Entr=C3=A4ge=20implem?= =?UTF-8?q?entiert.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 ++++- backend/app.py | 10 +++++----- backend/database.py | 8 ++++---- backend/templates/base.html | 23 +++++++++++++++++++++++ backend/templates/main.html | 33 +++++++++++++++++++++++++++++++++ backend/templates/songlist.html | 10 ++++++++-- 6 files changed, 77 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 93f9daa..aa69af9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,8 @@ "python.testing.pytestEnabled": false, "python.testing.unittestEnabled": true, "python.linting.pylintEnabled": false, - "python.linting.flake8Enabled": true + "python.linting.flake8Enabled": true, + "emmet.includeLanguages": { + "django-html": "html" + } } \ No newline at end of file diff --git a/backend/app.py b/backend/app.py index b3ebe97..50ce785 100644 --- a/backend/app.py +++ b/backend/app.py @@ -40,8 +40,8 @@ def enqueue(): name = request.json['name'] song_id = request.json['id'] if request.authorization: - database.add_entry(name, song_id, client_id) - return Response('{"status":"OK"}', mimetype='text/json') + entry_id = database.add_entry(name, song_id, client_id) + return Response(f"""{{"status":"OK", "entry_id":{entry_id}}}""", mimetype='text/json') else: if helpers.get_accept_entries(app): if not request.json: @@ -55,8 +55,8 @@ def enqueue(): song_id = request.json['id'] if database.check_queue_length() < int(app.config['MAX_QUEUE']): if database.check_entry_quota(client_id) < int(app.config['ENTRY_QUOTA']): - database.add_entry(name, song_id, client_id) - return Response('{"status":"OK"}', mimetype='text/json') + entry_id = database.add_entry(name, song_id, client_id) + return Response(f"""{{"status":"OK", "entry_id":{entry_id}}}""", mimetype='text/json') else: return Response('{"status":"Du hast bereits ' + str(database.check_entry_quota(client_id)) + ' Songs eingetragen, dies ist das Maximum an Einträgen die du in der Warteliste haben kannst."}', mimetype='text/json', status=423) else: @@ -177,7 +177,7 @@ def delete_entry_user(entry_id): if not helpers.is_valid_uuid(client_id): print(request.data) abort(400) - if database.get_raw_entry(entry_id)['client_id'] != client_id: # type: ignore + if database.get_raw_entry(entry_id)[3] != client_id: # type: ignore print(request.data) abort(403) if database.delete_entry(entry_id): diff --git a/backend/database.py b/backend/database.py index 68e264a..2c25b2c 100644 --- a/backend/database.py +++ b/backend/database.py @@ -134,11 +134,11 @@ def get_song_completions(input_string): def add_entry(name, song_id, client_id): with get_db_engine().connect() as conn: stmt = text( - "INSERT INTO entries (Song_Id,Name,Client_Id) VALUES (:par_song_id,:par_name,:par_client_id);") - conn.execute(stmt, {"par_song_id": song_id, "par_name": name, - "par_client_id": client_id}) # type: ignore + "INSERT INTO entries (Song_Id,Name,Client_Id) VALUES (:par_song_id,:par_name,:par_client_id) RETURNING entries.ID;") + cur = conn.execute(stmt, {"par_song_id": song_id, "par_name": name, + "par_client_id": client_id}) # type: ignore conn.commit() - return True + return cur.fetchone()[0] # type: ignore def add_sung_song(entry_id): diff --git a/backend/templates/base.html b/backend/templates/base.html index 26d0ec2..54676d3 100644 --- a/backend/templates/base.html +++ b/backend/templates/base.html @@ -147,6 +147,29 @@ loadOrGenerateClientId() } } + + function addEntry(entryId) { + entryArray = JSON.parse(localStorage.getItem("ownedEntries")) + if (entryArray == null) { + entryArray = [] + } + entryArray.push(entryId) + localStorage.setItem("ownedEntries", JSON.stringify(entryArray)) + } + + function removeEntry(entryId) { + entryArray = JSON.parse(localStorage.getItem("ownedEntries")) + if (entryArray == null) { + entryArray = [] + } + entryArray = entryArray.filter(function(value, index, arr){ return value != entryId;}); + localStorage.setItem("ownedEntries", JSON.stringify(entryArray)) + } + + function getOwnedEntries() { + return JSON.parse(localStorage.getItem("ownedEntries")) + } + diff --git a/backend/templates/main.html b/backend/templates/main.html index f0851ac..7af0e06 100644 --- a/backend/templates/main.html +++ b/backend/templates/main.html @@ -17,6 +17,7 @@ Name Song Künstler + @@ -34,5 +35,37 @@ $.getJSON("/api/entries/accept", (data) => { $('[data-toggle="tooltip"]').tooltip() } }) + +function TableActionsFormatter(value,row,index) { + console.log("Value: " + value + ", Row: " + row + ", Index: " + index) + console.log(row) + if (getOwnedEntries().includes(row.entry_ID)) { + return "" + } + return "" +} + +function requestDeletionAsUser(id) { + bootbox.confirm("Wirklich den Eintrag zurückziehen? Das könnte zu einer langen Wartezeit führen!", function (result) { + if (result) { + payload = { + "client_id": localStorage.getItem("clientId"), + "entry_id": id + } + $.ajax({ + url: "/api/entries/delete/"+id, + type: "POST", + data: JSON.stringify(payload), + contentType: "application/json; charset=utf-8", + dataType: "json", + success: function(result) { + bootbox.alert("Eintrag zurückgezogen!") + location.reload() + } + }) + } + }) +} + {% endblock %} \ No newline at end of file diff --git a/backend/templates/songlist.html b/backend/templates/songlist.html index 1225a90..7392a81 100644 --- a/backend/templates/songlist.html +++ b/backend/templates/songlist.html @@ -96,10 +96,16 @@ function submitModal() { var name = $("#singerNameInput").val(); var id = $("#selectedId").attr("value"); - enqueue(localStorage.getItem("clientId"),id, name, function () { + enqueue(localStorage.getItem("clientId"),id, name, function (response) { + console.log(response); + entryID = response["entry_id"]; + bootbox.alert({ + message: "Deine Eintragung wurde erfolgreich vorgenommen.", + }); + console.log("Entry ID: " + entryID); + addEntry(entryID); $("#enqueueModal").modal('hide'); window.location.href = '/#end'; - }, function (response) { bootbox.alert({ message: "Deine Eintragung konnte leider nicht vorgenommen werden.\nGrund: "+response.responseJSON.status,