diff --git a/backend/routes/achievements.py b/backend/routes/achievements.py index bff2421..76e023c 100644 --- a/backend/routes/achievements.py +++ b/backend/routes/achievements.py @@ -281,7 +281,8 @@ def check_and_award(user_id: int, conn): async def my_achievements(user=Depends(get_current_user)): uid = user["id"] 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) 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() 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() + # 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_row = conn.execute(""" @@ -422,7 +431,7 @@ async def my_achievements(user=Depends(get_current_user)): return { "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}, "rang": rank_row["rang"] if rank_row else 1, "categories": badge_categories,