From 1970bc64172d381d0a2feffa70c1b835625c8cc2 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Thu, 13 Jul 2023 22:04:03 +1000 Subject: [PATCH] If you create a tag with the same name as an existing tag it will update it rather then creating a new instance, still needs further work to improve UX --- app.py | 4 ++-- db.py | 30 +++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index 8c7533b..9d78309 100644 --- a/app.py +++ b/app.py @@ -347,9 +347,9 @@ def add_tag(): tag = request.args.get('tag') tag_filter = request.args.get('filter') if person_id: - db.add_tag_for_person(person_id, tag, tag_filter) + db.add_or_update_tag_for_person(person_id, tag, tag_filter) else: - db.add_tag_for_dashboard(tag, tag_filter) + db.add_or_update_tag_for_dashboard(tag, tag_filter) return "" diff --git a/db.py b/db.py index d1d3644..6045b6e 100644 --- a/db.py +++ b/db.py @@ -197,7 +197,7 @@ class DataBase(): note = next((t['Note'] for t in topsets), '') return { - 'PersonId': next((t['PersonId'] for t in topsets), -1), + 'PersonId': person_id, 'PersonName': next((t['PersonName'] for t in topsets), 'Unknown'), 'WorkoutId': workout_id, 'StartDate': topsets[0]['StartDate'], @@ -273,9 +273,17 @@ class DataBase(): ORDER BY T.name""", [person_id]) - def add_tag_for_person(self, person_id, tag_name, tag_filter): - self.execute('INSERT INTO Tag (person_id, name, filter) VALUES (%s, %s, %s)', [ - person_id, tag_name, tag_filter], commit=True) + def add_or_update_tag_for_person(self, person_id, tag_name, tag_filter): + # check if a tag exists for dashboard with the same tag_name + tag = self.execute('SELECT tag_id AS "TagId" FROM Tag WHERE person_id=%s AND name=%s LIMIT 1', [ + person_id, tag_name], one=True) + if tag: + # update the tag + self.execute('UPDATE Tag SET filter=%s WHERE tag_id=%s', [ + tag_filter, tag['TagId']], commit=True) + else: + self.execute('INSERT INTO Tag (person_id, name, filter) VALUES (%s, %s, %s)', [ + person_id, tag_name, tag_filter], commit=True) def delete_tag_for_person(self, person_id, tag_id): self.execute('DELETE FROM Tag WHERE person_id=%s AND tag_id=%s', [ @@ -295,9 +303,17 @@ class DataBase(): ORDER BY T.name""", []) - def add_tag_for_dashboard(self, tag_name, tag_filter): - self.execute('INSERT INTO Tag (name, filter) VALUES (%s, %s)', [ - tag_name, tag_filter], commit=True) + def add_or_update_tag_for_dashboard(self, tag_name, tag_filter): + # check if a tag exists for dashboard with the same tag_name + tag = self.execute('SELECT tag_id AS "TagId" FROM Tag WHERE person_id IS NULL AND name=%s LIMIT 1', [ + tag_name], one=True) + if tag: + # update the tag + self.execute('UPDATE Tag SET filter=%s WHERE tag_id=%s', [ + tag_filter, tag['TagId']], commit=True) + else: + self.execute('INSERT INTO Tag (name, filter) VALUES (%s, %s)', [ + tag_name, tag_filter], commit=True) def delete_tag_for_dashboard(self, tag_id): self.execute('DELETE FROM Tag WHERE tag_id=%s', [tag_id], commit=True)