From fb6500fc54701f591c59462919a59b9ad9c3f96c Mon Sep 17 00:00:00 2001 From: sofiyan Date: Sat, 9 Aug 2025 22:48:04 +0530 Subject: [PATCH] fix: prevent mongoose model overwrite errors in all model files - Add conditional model registration using mongoose.models check - Fix HeartRateModel, BloodPressureModel, SleepModel in Metric.ts - Fix WorkoutModel, RouteModel in Workout.ts - Fix createMetricModel function for dynamic model creation - Prevents "Cannot overwrite model once compiled" during development --- server/src/models/Metric.ts | 39 +++++++++++++++++++++--------------- server/src/models/Workout.ts | 8 ++++++-- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/server/src/models/Metric.ts b/server/src/models/Metric.ts index 48c70c5..74b9959 100644 --- a/server/src/models/Metric.ts +++ b/server/src/models/Metric.ts @@ -169,21 +169,28 @@ const SleepSchema: Schema = new Schema({ SleepSchema.index({ date: 1, source: 1 }, { unique: true }); export const createMetricModel = (name: MetricName) => { - return mongoose.model(String(name), BaseMetricSchema, String(name)); + const modelName = String(name); + return mongoose.models[modelName] || mongoose.model(modelName, BaseMetricSchema, modelName); }; -export const BloodPressureModel = mongoose.model( - 'BloodPressure', - BloodPressureSchema, - 'blood_pressure', -); -export const HeartRateModel = mongoose.model( - 'HeartRate', - HeartRateSchema, - 'heart_rate', -); -export const SleepModel = mongoose.model( - 'SleepAnalysis', - SleepSchema, - 'sleep_analysis', -); +// Safely create or retrieve models to avoid "Cannot overwrite model" error +export const BloodPressureModel = mongoose.models.BloodPressure || + mongoose.model( + 'BloodPressure', + BloodPressureSchema, + 'blood_pressure', + ); + +export const HeartRateModel = mongoose.models.HeartRate || + mongoose.model( + 'HeartRate', + HeartRateSchema, + 'heart_rate', + ); + +export const SleepModel = mongoose.models.SleepAnalysis || + mongoose.model( + 'SleepAnalysis', + SleepSchema, + 'sleep_analysis', + ); diff --git a/server/src/models/Workout.ts b/server/src/models/Workout.ts index 6407340..6b0e3c8 100644 --- a/server/src/models/Workout.ts +++ b/server/src/models/Workout.ts @@ -214,5 +214,9 @@ export function mapRoute(data: WorkoutData) { }; } -export const WorkoutModel = mongoose.model('Workout', WorkoutSchema, 'workouts'); -export const RouteModel = mongoose.model('Route', routeSchema, 'workout_routes'); +// Safely create or retrieve models to avoid "Cannot overwrite model" error +export const WorkoutModel = mongoose.models.Workout || + mongoose.model('Workout', WorkoutSchema, 'workouts'); + +export const RouteModel = mongoose.models.Route || + mongoose.model('Route', routeSchema, 'workout_routes');