fix: preserve GPS data when saving session edits
All checks were successful
CI / update (push) Successful in 2m18s

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.
This commit is contained in:
2026-03-25 07:24:10 +01:00
parent 1e0dd27fa3
commit 0263a18c5f

View File

@@ -59,7 +59,30 @@ export const PUT: RequestHandler = async ({ params, request, locals }) => {
const updateData: Record<string, unknown> = {}; const updateData: Record<string, unknown> = {};
if (name) updateData.name = name; if (name) updateData.name = name;
if (exercises) { 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<string, { gpsTrack?: unknown; gpsPreview?: unknown; totalDistance?: number }>();
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<string, unknown>) => {
const gps = gpsDataByExercise.get(ex.exerciseId as string);
return gps ? { ...ex, ...gps } : ex;
});
// Recompute totalVolume // Recompute totalVolume
let totalVolume = 0; let totalVolume = 0;
let totalDistance = 0; let totalDistance = 0;