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
+4 -2
View File
@@ -195,11 +195,13 @@ async def route_activities(
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
# Rank by moving time (pauses excluded), falling back to elapsed for
# activities without it — consistent with avg pace being moving-time based.
result = await db.execute(
select(Activity).where(
Activity.named_route_id == route_id,
Activity.user_id == current_user.id,
).order_by(Activity.duration_s)
).order_by(func.coalesce(Activity.moving_time_s, Activity.duration_s))
)
activities = result.scalars().all()
return [
@@ -207,7 +209,7 @@ async def route_activities(
"id": a.id,
"name": a.name,
"start_time": a.start_time,
"duration_s": a.duration_s,
"duration_s": a.moving_time_s or a.duration_s,
"distance_m": a.distance_m,
"avg_heart_rate": a.avg_heart_rate,
"avg_speed_ms": a.avg_speed_ms,