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)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user