add completeness to milestones

This commit is contained in:
Lili (Tlapka) 2023-03-20 13:23:20 +01:00
parent 9d910e58ce
commit 49053ee4f4
4 changed files with 49 additions and 5 deletions

View File

@ -110,7 +110,7 @@ def refresh_milestones():
) )
if cursor.fetchone() is None: if cursor.fetchone() is None:
cursor.execute( cursor.execute(
"INSERT INTO milestones(name, progress, goal) VALUES(?, 0, ?)", "INSERT INTO milestones(name, progress, goal, complete) VALUES(?, 0, ?, FALSE)",
(redeem, redeem_info['goal']) (redeem, redeem_info['goal'])
) )
db.commit() db.commit()

View File

@ -214,8 +214,7 @@ def add_to_milestone(db, user_id, redeem_name, points_donated):
current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command " current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command "
"after you added a new milestone to the config?") "after you added a new milestone to the config?")
return False return False
progress = row[0] progress, goal = row
goal = row[1]
if progress + points_donated > goal: if progress + points_donated > goal:
points_donated = goal - progress points_donated = goal - progress
if use_points(db, user_id, points_donated): if use_points(db, user_id, points_donated):
@ -230,6 +229,46 @@ def add_to_milestone(db, user_id, redeem_name, points_donated):
return False return False
def milestone_complete(db, redeem_name):
try:
cursor = db.execute(
"SELECT complete FROM milestones WHERE name = ?",
(redeem_name,)
)
row = cursor.fetchone()
if row is None:
current_app.logger.warning("Milestone not found in database.")
current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command "
"after you added a new milestone to the config?")
return row[0]
except Error as e:
current_app.logger.error(f"Error occured checking if milestone is complete: {e.args[0]}")
def check_apply_milestone_completion(db, redeem_name):
try:
cursor = db.execute(
"SELECT progress, goal FROM milestones WHERE name = ?",
(redeem_name,)
)
row = cursor.fetchone()
if row is None:
current_app.logger.warning("Milestone not found in database.")
current_app.logger.warning("Maybe you forgot to run the refresh-milestones CLI command "
"after you added a new milestone to the config?")
progress, goal = row
if progress == goal:
cursor = db.execute(
"UPDATE milestones SET complete = TRUE WHERE name = ?",
(redeem_name,)
)
return True
return False
except Error as e:
current_app.logger.error(f"Error occured applying milestone completion: {e.args[0]}")
return False
def all_milestones(db): def all_milestones(db):
try: try:
cursor = db.execute( cursor = db.execute(

View File

@ -47,7 +47,9 @@ def handle_redeem(message, user_id):
else: else:
send_chat(f"Redeeming {redeem} failed.") send_chat(f"Redeeming {redeem} failed.")
elif redeem_type == "milestone": elif redeem_type == "milestone":
if not note: if milestone_complete(db, redeem):
send_chat(f"Can't redeem {redeem}, that milestone was already completed!")
elif not note:
send_chat(f"Cannot redeem {redeem}, no amount of points specified.") send_chat(f"Cannot redeem {redeem}, no amount of points specified.")
elif not note.isdigit(): elif not note.isdigit():
send_chat(f"Cannot redeem {redeem}, amount of points is not an integer.") send_chat(f"Cannot redeem {redeem}, amount of points is not an integer.")
@ -55,5 +57,7 @@ def handle_redeem(message, user_id):
send_chat(f"Can't redeem {redeem}, you don't have enough points.") send_chat(f"Can't redeem {redeem}, you don't have enough points.")
elif add_to_milestone(db, user_id, redeem, int(note)): elif add_to_milestone(db, user_id, redeem, int(note)):
send_chat(f"Succesfully donated to {redeem} milestone!") send_chat(f"Succesfully donated to {redeem} milestone!")
if check_apply_milestone_completion(db, redeem):
send_chat(f"Milestone goal {redeem} complete!")
else: else:
send_chat(f"{redeem} not redeemed, type of redeem not found.") send_chat(f"{redeem} not redeemed, type of redeem not found.")

View File

@ -12,7 +12,8 @@ CREATE TABLE milestones (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL, name TEXT NOT NULL,
progress INTEGER NOT NULL, progress INTEGER NOT NULL,
goal INTEGER NOT NULL goal INTEGER NOT NULL,
complete BOOLEAN NOT NULL
); );
CREATE TABLE counters ( CREATE TABLE counters (