fix: preserve GPS data when saving session edits
All checks were successful
CI / update (push) Successful in 2m18s
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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user