ui update and some backend functionality adding in accordance with research on adhd and ux design
This commit is contained in:
@@ -8,6 +8,7 @@ that can be called from API routes, bot commands, or scheduler.
|
||||
import uuid
|
||||
from datetime import datetime, date
|
||||
import core.postgres as postgres
|
||||
import core.tz as tz
|
||||
|
||||
|
||||
def start_session(routine_id, user_uuid):
|
||||
@@ -159,9 +160,13 @@ def clone_template(template_id, user_uuid):
|
||||
return routine
|
||||
|
||||
|
||||
STREAK_MILESTONES = {3, 7, 14, 21, 30, 60, 90, 100, 365}
|
||||
|
||||
|
||||
def _update_streak(user_uuid, routine_id):
|
||||
"""Update streak after completing a session. Resets if day was missed."""
|
||||
today = date.today()
|
||||
"""Update streak after completing a session. Resets if day was missed.
|
||||
Returns the updated streak dict with optional 'milestone' key."""
|
||||
today = tz.user_today()
|
||||
|
||||
streak = postgres.select_one(
|
||||
"routine_streaks",
|
||||
@@ -169,6 +174,7 @@ def _update_streak(user_uuid, routine_id):
|
||||
)
|
||||
|
||||
if not streak:
|
||||
new_streak_val = 1
|
||||
new_streak = {
|
||||
"id": str(uuid.uuid4()),
|
||||
"user_uuid": user_uuid,
|
||||
@@ -177,7 +183,10 @@ def _update_streak(user_uuid, routine_id):
|
||||
"longest_streak": 1,
|
||||
"last_completed_date": today.isoformat(),
|
||||
}
|
||||
return postgres.insert("routine_streaks", new_streak)
|
||||
result = postgres.insert("routine_streaks", new_streak)
|
||||
if new_streak_val in STREAK_MILESTONES:
|
||||
result["milestone"] = new_streak_val
|
||||
return result
|
||||
|
||||
last_completed = streak.get("last_completed_date")
|
||||
if last_completed:
|
||||
@@ -187,24 +196,28 @@ def _update_streak(user_uuid, routine_id):
|
||||
if days_diff == 0:
|
||||
return streak
|
||||
elif days_diff == 1:
|
||||
new_streak = streak["current_streak"] + 1
|
||||
new_streak_val = streak["current_streak"] + 1
|
||||
else:
|
||||
new_streak = 1
|
||||
new_streak_val = 1
|
||||
else:
|
||||
new_streak = 1
|
||||
new_streak_val = 1
|
||||
|
||||
longest = max(streak["longest_streak"], new_streak)
|
||||
longest = max(streak["longest_streak"], new_streak_val)
|
||||
|
||||
postgres.update(
|
||||
"routine_streaks",
|
||||
{
|
||||
"current_streak": new_streak,
|
||||
"current_streak": new_streak_val,
|
||||
"longest_streak": longest,
|
||||
"last_completed_date": today.isoformat(),
|
||||
},
|
||||
{"id": streak["id"]}
|
||||
)
|
||||
return streak
|
||||
|
||||
result = {**streak, "current_streak": new_streak_val, "longest_streak": longest}
|
||||
if new_streak_val in STREAK_MILESTONES:
|
||||
result["milestone"] = new_streak_val
|
||||
return result
|
||||
|
||||
|
||||
def calculate_streak(user_uuid, routine_id):
|
||||
@@ -217,8 +230,14 @@ def calculate_streak(user_uuid, routine_id):
|
||||
|
||||
|
||||
def get_active_session(user_uuid):
|
||||
"""Get user's currently active session."""
|
||||
return postgres.select_one(
|
||||
"""Get user's currently active or paused session."""
|
||||
session = postgres.select_one(
|
||||
"routine_sessions",
|
||||
{"user_uuid": user_uuid, "status": "active"}
|
||||
)
|
||||
if not session:
|
||||
session = postgres.select_one(
|
||||
"routine_sessions",
|
||||
{"user_uuid": user_uuid, "status": "paused"}
|
||||
)
|
||||
return session
|
||||
|
||||
Reference in New Issue
Block a user