Streak: entkoppelt vom App-Öffnen — nur noch echte Touren zählen
- update_streak NICHT mehr in GET /achievements/me (lief bei jedem Öffnen). Streak wird nur noch von create_route (aufnehmen) + record_walk (ablaufen) hochgezählt. - Angezeigter Streak korrekt: nur gültig wenn letzte Tour heute/gestern war, sonst 0 (gerissen) — ohne den gespeicherten Wert zu verändern.
This commit is contained in:
parent
667ed91f33
commit
f5b5bb2289
1 changed files with 12 additions and 3 deletions
|
|
@ -281,7 +281,8 @@ def check_and_award(user_id: int, conn):
|
||||||
async def my_achievements(user=Depends(get_current_user)):
|
async def my_achievements(user=Depends(get_current_user)):
|
||||||
uid = user["id"]
|
uid = user["id"]
|
||||||
with db() as conn:
|
with db() as conn:
|
||||||
update_streak(uid, conn)
|
# Streak NICHT beim Öffnen bumpen — nur echte Touren zählen
|
||||||
|
# (create_route / record_walk). check_and_award bleibt (Badges, idempotent).
|
||||||
new_badges = check_and_award(uid, conn)
|
new_badges = check_and_award(uid, conn)
|
||||||
|
|
||||||
stats = conn.execute("""
|
stats = conn.execute("""
|
||||||
|
|
@ -302,8 +303,16 @@ async def my_achievements(user=Depends(get_current_user)):
|
||||||
""", (uid, uid, uid, uid, uid, uid, uid, uid, uid)).fetchone()
|
""", (uid, uid, uid, uid, uid, uid, uid, uid, uid)).fetchone()
|
||||||
|
|
||||||
streak_row = conn.execute(
|
streak_row = conn.execute(
|
||||||
"SELECT current_streak, max_streak FROM users WHERE id=?", (uid,)
|
"SELECT current_streak, max_streak, last_activity_date FROM users WHERE id=?", (uid,)
|
||||||
).fetchone()
|
).fetchone()
|
||||||
|
# Angezeigter Streak: nur gültig, wenn die letzte echte Tour heute oder
|
||||||
|
# gestern war — sonst gerissen (0). Gespeicherten Wert NICHT verändern
|
||||||
|
# (wird erst bei der nächsten echten Tour zurückgesetzt).
|
||||||
|
_today = date.today().isoformat()
|
||||||
|
_yest = (date.today() - timedelta(days=1)).isoformat()
|
||||||
|
display_streak = ((streak_row["current_streak"] or 0)
|
||||||
|
if streak_row and streak_row["last_activity_date"] in (_today, _yest)
|
||||||
|
else 0)
|
||||||
|
|
||||||
# Wetter-Tapferkeit
|
# Wetter-Tapferkeit
|
||||||
wetter_row = conn.execute("""
|
wetter_row = conn.execute("""
|
||||||
|
|
@ -422,7 +431,7 @@ async def my_achievements(user=Depends(get_current_user)):
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"stats": dict(stats) if stats else {},
|
"stats": dict(stats) if stats else {},
|
||||||
"streak": {"current": streak_row["current_streak"] if streak_row else 0,
|
"streak": {"current": display_streak,
|
||||||
"max": streak_row["max_streak"] if streak_row else 0},
|
"max": streak_row["max_streak"] if streak_row else 0},
|
||||||
"rang": rank_row["rang"] if rank_row else 1,
|
"rang": rank_row["rang"] if rank_row else 1,
|
||||||
"categories": badge_categories,
|
"categories": badge_categories,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue