fix: route leaderboards rank by moving time not elapsed — top-10 route times and route completions list now use COALESCE(moving_time_s, duration_s) so mid-activity pauses don't inflate times (consistent with moving-time avg pace)
Build and push images / validate (push) Successful in 6s
Build and push images / build-backend (push) Successful in 1m11s
Build and push images / build-worker (push) Successful in 5s
Build and push images / build-frontend (push) Successful in 6s

This commit is contained in:
2026-07-01 21:04:46 +01:00
parent acf553ff5c
commit 92cea4dc99
2 changed files with 10 additions and 4 deletions
+6 -2
View File
@@ -423,17 +423,21 @@ async def get_route_leaderboard(
if not act.named_route_id:
return None
# Rank by moving time (pauses excluded), falling back to elapsed for
# activities without it — consistent with avg pace being moving-time based.
effort_s = func.coalesce(Activity.moving_time_s, Activity.duration_s)
rows = (await db.execute(
select(
Activity.id, Activity.name, Activity.start_time,
Activity.duration_s, Activity.distance_m, Activity.avg_heart_rate,
effort_s.label("duration_s"),
Activity.distance_m, Activity.avg_heart_rate,
)
.where(
Activity.named_route_id == act.named_route_id,
Activity.user_id == current_user.id,
Activity.duration_s.isnot(None),
)
.order_by(Activity.duration_s)
.order_by(effort_s)
)).all()
if not rows:
return None