From 0263a18c5fcea68d1af19cf6f3469d79c211509c Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Wed, 25 Mar 2026 07:24:10 +0100 Subject: [PATCH] fix: preserve GPS data when saving session edits The PUT endpoint overwrote the exercises array with client data that doesn't include gpsTrack/gpsPreview/totalDistance. Now merges existing GPS data back into incoming exercises before saving. --- .../api/fitness/sessions/[id]/+server.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/routes/api/fitness/sessions/[id]/+server.ts b/src/routes/api/fitness/sessions/[id]/+server.ts index 272007c..685b993 100644 --- a/src/routes/api/fitness/sessions/[id]/+server.ts +++ b/src/routes/api/fitness/sessions/[id]/+server.ts @@ -59,7 +59,30 @@ export const PUT: RequestHandler = async ({ params, request, locals }) => { const updateData: Record = {}; if (name) updateData.name = name; if (exercises) { - updateData.exercises = exercises; + // Preserve gpsTrack/gpsPreview/totalDistance from existing exercises + const existing = await WorkoutSession.findOne({ + _id: params.id, + createdBy: session.user.nickname + }).select('exercises.exerciseId exercises.gpsTrack exercises.gpsPreview exercises.totalDistance').lean(); + + const gpsDataByExercise = new Map(); + if (existing) { + for (const ex of existing.exercises) { + if (ex.gpsTrack?.length || ex.gpsPreview?.length || ex.totalDistance) { + gpsDataByExercise.set(ex.exerciseId, { + gpsTrack: ex.gpsTrack, + gpsPreview: ex.gpsPreview, + totalDistance: ex.totalDistance + }); + } + } + } + + updateData.exercises = exercises.map((ex: Record) => { + const gps = gpsDataByExercise.get(ex.exerciseId as string); + return gps ? { ...ex, ...gps } : ex; + }); + // Recompute totalVolume let totalVolume = 0; let totalDistance = 0;