@runnerpro/backend 1.22.0 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"saveWorkoutAplication.d.ts","sourceRoot":"","sources":["../../../../src/workout/saveWorkoutAplication.ts"],"names":[],"mappings":"AA4SA;;;;;;;;;;GAUG;AACH,QAAA,MAAM,qBAAqB,SACnB,GAAG,UAED,GAAG,KACV,QAAQ,MAAM,GAAG,IAAI,CAsEvB,CAAC;AAuEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"saveWorkoutAplication.d.ts","sourceRoot":"","sources":["../../../../src/workout/saveWorkoutAplication.ts"],"names":[],"mappings":"AAuTA;;;;;;;;;;GAUG;AACH,QAAA,MAAM,qBAAqB,SACnB,GAAG,UAED,GAAG,KACV,QAAQ,MAAM,GAAG,IAAI,CA6EvB,CAAC;AAuEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -160,6 +160,16 @@ const VENTANA_INICIO_MS = 30 * 60 * 1000;
160
160
  // terminar, o redondea la duración). 2h la absorben; si aun así no solapan, son
161
161
  // dos entrenos distintos y se respetan como dobles.
162
162
  const VENTANA_INICIO_MANUAL_MS = 2 * 60 * 60 * 1000;
163
+ // Duración mínima de un entreno importado (anti "entrenos residuales"). Un
164
+ // arranque accidental del reloj/app (p.ej. re-lanzar la rutina al acabar y
165
+ // pararla al minuto) genera en el proveedor una actividad REAL de segundos con
166
+ // UUID propio: el dedup no puede fusionarla (es otra actividad, no solapa) y
167
+ // acababa como "hecho" duplicado del día con el mismo título de rutina, o
168
+ // completando un planificado con 60 s. Por debajo de 2 min no existe una
169
+ // sesión de entrenamiento legítima; se descarta en este embudo común para
170
+ // cubrir TODAS las fuentes (Apple/Strava/Garmin). El completado MANUAL de la
171
+ // app NO pasa por aquí, así que no se ve afectado.
172
+ const DURACION_MINIMA_INGESTA_S = 120;
163
173
  const inicioSolapa = (a, b, ventanaMs = VENTANA_INICIO_MS) => {
164
174
  if (!a || !b)
165
175
  return false;
@@ -298,6 +308,12 @@ const aplicarMerge = (q, idWorkout, opts, esFilaNueva) => __awaiter(void 0, void
298
308
  const saveWorkoutAplication = (opts,
299
309
  // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
300
310
  _data) => __awaiter(void 0, void 0, void 0, function* () {
311
+ // Entreno residual: se ignora ANTES de traducir y de abrir la tx. Sólo aplica
312
+ // cuando la fuente informa duración; sin ella no se puede juzgar y se deja pasar.
313
+ const duracionIngesta = Number(opts.duration);
314
+ if (Number.isFinite(duracionIngesta) && duracionIngesta > 0 && duracionIngesta < DURACION_MINIMA_INGESTA_S) {
315
+ return null;
316
+ }
301
317
  const dateStr = (0, moment_1.default)(opts.date).format('YYYY-MM-DD');
302
318
  const pt = predicadoTipo(opts);
303
319
  // Traducción FUERA de la sección crítica. getTitleDescriptionTranslated hace
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runnerpro/backend",
3
- "version": "1.22.0",
3
+ "version": "1.22.1",
4
4
  "description": "A collection of common backend functions",
5
5
  "exports": {
6
6
  ".": "./lib/cjs/index.js"