diff --git a/tlapbot/__init__.py b/tlapbot/__init__.py index 6e3c26c..14eabd8 100644 --- a/tlapbot/__init__.py +++ b/tlapbot/__init__.py @@ -52,6 +52,7 @@ def create_app(test_config=None): app.cli.add_command(db.clear_queue_command) app.cli.add_command(db.refresh_counters_command) app.cli.add_command(db.refresh_and_clear_command) + app.cli.add_command(db.refresh_milestones_command) # scheduler job for giving points to users def proxy_job(): diff --git a/tlapbot/db.py b/tlapbot/db.py index 69947a7..4905fa2 100644 --- a/tlapbot/db.py +++ b/tlapbot/db.py @@ -32,7 +32,7 @@ def insert_counters(db): (redeem,) ) db.commit() - except Error as e: + except sqlite3.Error as e: print("Failed inserting counters to db:", e.args[0]) @@ -56,7 +56,7 @@ def clear_redeem_queue(): """UPDATE counters SET count = 0""" ) db.commit() - except Error as e: + except sqlite3.Error as e: print("Error occured deleting redeem queue:", e.args[0]) @@ -66,7 +66,7 @@ def refresh_counters(): try: db.execute("DELETE FROM counters") db.commit() - except Error as e: + except sqlite3.Error as e: print("Error occured deleting old counters:", e.args[0]) for redeem, redeem_info in current_app.config['REDEEMS'].items(): @@ -77,7 +77,7 @@ def refresh_counters(): (redeem,) ) db.commit() - except Error as e: + except sqlite3.Error as e: print("Failed inserting counters to db:", e.args[0]) @@ -86,29 +86,36 @@ def refresh_milestones(): # delete old milestones try: cursor = db.execute("SELECT name FROM milestones") - counters = cursor.fetchall() + milestones = cursor.fetchall() to_delete = [] - for counter in counters: - print(f"checking counter {counter}") - if counter not in current_app.config['REDEEMS'].items(): - to_delete.append(counter) - elif current_app.config['REDEEMS'][counter]['type'] != "milestone": - to_delete.append(counter) - cursor.execute("DELETE FROM counters WHERE name IN ?", (to_delete,)) + for milestone in milestones: + milestone = milestone[0] + print(f"Checking milestone {milestone}") + if milestone not in current_app.config['REDEEMS'].items(): + to_delete.append(milestone) + elif current_app.config['REDEEMS'][milestone]['type'] != "milestone": + to_delete.append(milestone) + for milestone in to_delete: + cursor.execute("DELETE FROM counters WHERE name = ?", (milestone,)) db.commit() - except Error as e: + except sqlite3.Error as e: print("Failed deleting old milestones from db:", e.args[0]) # add new milestones try: for redeem, redeem_info in current_app.config['REDEEMS'].items(): - if redeem_info["type"] == "milestone": - cursor = db.execute( - "INSERT INTO milestones(name, progress, goal) VALUES(?, 0, 0)", - (redeem, 0, redeem_info['goal']) - ) - db.commit() - except Error as e: + if redeem_info["type"] == "milestone": + cursor = db.execute( + "SELECT goal FROM milestones WHERE name = ?", + (redeem,) + ) + if cursor.fetchone() is None: + cursor.execute( + "INSERT INTO milestones(name, progress, goal) VALUES(?, 0, ?)", + (redeem, redeem_info['goal']) + ) + db.commit() + except sqlite3.Error as e: print("Failed inserting milestones to db:", e.args[0]) diff --git a/tlapbot/schema.sql b/tlapbot/schema.sql index ddd863e..f308945 100644 --- a/tlapbot/schema.sql +++ b/tlapbot/schema.sql @@ -1,5 +1,6 @@ DROP TABLE IF EXISTS counters; DROP TABLE IF EXISTS redeem_queue; +DROP TABLE IF EXISTS milestones; CREATE TABLE IF NOT EXISTS points ( id TEXT PRIMARY KEY,