Precompute run analysis and serve compact route previews

This commit is contained in:
Peter Stockings
2026-10-02 14:19:47 +10:00
parent 2d7069c12d
commit 6bfab483d4
13 changed files with 518 additions and 56 deletions
+12 -9
View File
@@ -24,11 +24,12 @@ from werkzeug.security import check_password_hash, generate_password_hash
from garmin_sync.service import SyncError, atomic_write
from .analytics import analyse, pace_text
from .analytics import pace_text
from .display import stored_analysis
from .extensions import db, limiter
from .models import Activity, Friendship, GarminConnection, User
from .records import record_book
from .services import activity_data, import_cache, import_upload
from .services import activity_data, import_cache, import_upload, route_data
web = Blueprint("web", __name__)
DUMMY_HASH = generate_password_hash("not-a-real-account-password")
@@ -76,11 +77,7 @@ def are_friends(first, second):
def latest_mapped_run(rows):
return next(
(
row
for row in rows
if row.sport == "running" and row.has_route
),
(row for row in rows if row.sport == "running" and row.has_route),
None,
)
@@ -311,7 +308,7 @@ def profile(username):
@web.get("/activities/<int:activity_id>")
def activity(activity_id):
row, owner = get_activity(activity_id)
analysis = analyse(row)
analysis = stored_analysis(row)
efforts = []
if owner:
history = db.session.scalars(db.select(Activity).filter_by(owner_id=row.owner_id)).all()
@@ -332,6 +329,12 @@ def data(activity_id):
return jsonify(activity_data(row, owner))
@web.get("/activities/<int:activity_id>/route")
def route(activity_id):
row, _ = get_activity(activity_id)
return jsonify(route_data(row))
@web.post("/activities/<int:activity_id>/share")
@login_required
def share_activity(activity_id):
@@ -366,7 +369,7 @@ def shared_activity(token):
activity=row,
owner_view=False,
public_view=True,
analysis=analyse(row),
analysis=stored_analysis(row),
pace_text=pace_text,
data_url=url_for("web.shared_activity_data", token=token),
)