Paginate activity history and aggregate dashboard totals in SQL
This commit is contained in:
+7
-3
@@ -85,14 +85,17 @@ def persist_efforts(activity):
|
||||
activity.has_route = any(sample.get("point") for sample in activity.samples)
|
||||
|
||||
|
||||
def record_book(activities):
|
||||
def record_book(activities, run_ids=None, presorted=False):
|
||||
"""Compare persisted efforts in chronology; never read samples here.
|
||||
|
||||
First efforts establish a record. Strict improvements earn historical PR
|
||||
badges, which remain on the run after a later activity beats that record.
|
||||
"""
|
||||
records, runs = {}, {}
|
||||
for activity in sorted(activities, key=lambda row: (row.started_at, row.id)):
|
||||
history = (
|
||||
activities if presorted else sorted(activities, key=lambda row: (row.started_at, row.id))
|
||||
)
|
||||
for activity in history:
|
||||
efforts = (
|
||||
[dict(effort) for effort in activity.best_efforts]
|
||||
if activity.efforts_version == EFFORTS_VERSION and activity.sport == "running"
|
||||
@@ -103,7 +106,8 @@ def record_book(activities):
|
||||
effort["pr"] = previous is None or effort["seconds"] < previous["seconds"] - 1e-6
|
||||
if effort["pr"]:
|
||||
records[effort["label"]] = dict(effort, activity=activity)
|
||||
runs[activity.id] = efforts
|
||||
if run_ids is None or activity.id in run_ids:
|
||||
runs[activity.id] = efforts
|
||||
return {"records": [records[label] for label, _ in DISTANCES if label in records], "runs": runs}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user