diff --git a/src/Services/ParameterService.ts b/src/Services/ParameterService.ts index dc4e477934e20f02ebcbe8ebac0ec996c3e365b5..5be221fdde4e18270a7ee6e09fad1efab37ecd51 100644 --- a/src/Services/ParameterService.ts +++ b/src/Services/ParameterService.ts @@ -224,130 +224,19 @@ const updateBMR = async (parameters: EquationConstantDTO[]): Promise<void> => { if (parameter.sex !== sexo || parameter.ageRange !== edad) { throw new Error('Parameters sex and age must be the same for all array items.'); } + if (parameter.ageRange !== AgeBracket.a18_29 + && parameter.ageRange !== AgeBracket.a30_59 + && parameter.ageRange !== AgeBracket.a60) { + throw new Error(`Age range ${parameters[0].ageRange} does not have BMR constants.`); + } if (orders.includes(parameter.order)) { throw new Error('Order must be different for all array items.'); } orders.push(parameter.order); }); - switch (parameters[0].ageRange) { - case AgeBracket.a18_29: { - await EquationConstant.update( - { value: parameters[0].value }, - { - where: { - ageRange: parameters[0].ageRange, - sex: parameters[0].sex, - order: parameters[0].order, - parameterType: parameters[0].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[1].value }, - { - where: { - ageRange: parameters[1].ageRange, - sex: parameters[1].sex, - order: parameters[1].order, - parameterType: parameters[1].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - break; - } - case AgeBracket.a30_59: { - await EquationConstant.update( - { value: parameters[0].value }, - { - where: { - ageRange: parameters[0].ageRange, - sex: parameters[0].sex, - order: parameters[0].order, - parameterType: parameters[0].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[1].value }, - { - where: { - ageRange: parameters[1].ageRange, - sex: parameters[1].sex, - order: parameters[1].order, - parameterType: parameters[1].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - break; - } - case AgeBracket.a60: { - await EquationConstant.update( - { value: parameters[0].value }, - { - where: { - ageRange: parameters[0].ageRange, - sex: parameters[0].sex, - order: parameters[0].order, - parameterType: parameters[0].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[1].value }, - { - where: { - ageRange: parameters[1].ageRange, - sex: parameters[1].sex, - order: parameters[1].order, - parameterType: parameters[1].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - break; - } - default: { - throw new Error(`Age range ${parameters[0].ageRange} does not have BMR constants.`); - } - } + await EquationConstant.bulkCreate(parameters, { + updateOnDuplicate: ['value'], + }); }; const updateTEE = async (parameters: EquationConstantDTO[]): Promise<void> => { @@ -370,42 +259,22 @@ const updateTEE = async (parameters: EquationConstantDTO[]): Promise<void> => { case AgeBracket.m3: case AgeBracket.m4: case AgeBracket.m5: { + const paramsToUpdate: EquationConstantDTO[] = []; for (let i = 0; i <= 5; i += 1) { - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[0].value }, - { - where: { - ageRange: `${i} meses`, - order: parameters[0].order, - parameterType: parameters[0].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[1].value }, - { - where: { - ageRange: `${i} meses`, - order: parameters[1].order, - parameterType: parameters[1].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; + parameters.forEach((param: EquationConstantDTO) => { + paramsToUpdate.push({ + ageRange: `${i} meses` as AgeBracket, + order: param.order, + sex: param.sex, + value: param.value, + description: param.description, + parameterType: param.parameterType, + }); }); } + await EquationConstant.bulkCreate(paramsToUpdate, { + updateOnDuplicate: ['value'], + }); break; } case AgeBracket.m6: @@ -414,42 +283,22 @@ const updateTEE = async (parameters: EquationConstantDTO[]): Promise<void> => { case AgeBracket.m9: case AgeBracket.m10: case AgeBracket.m11: { + const paramsToUpdate: EquationConstantDTO[] = []; for (let i = 6; i <= 11; i += 1) { - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[0].value }, - { - where: { - ageRange: `${i} meses`, - order: parameters[0].order, - parameterType: parameters[0].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[1].value }, - { - where: { - ageRange: `${i} meses`, - order: parameters[1].order, - parameterType: parameters[1].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; + parameters.forEach((param: EquationConstantDTO) => { + paramsToUpdate.push({ + ageRange: `${i} meses` as AgeBracket, + order: param.order, + sex: param.sex, + value: param.value, + description: param.description, + parameterType: param.parameterType, + }); }); } + await EquationConstant.bulkCreate(paramsToUpdate, { + updateOnDuplicate: ['value'], + }); break; } case AgeBracket.a1: @@ -469,62 +318,22 @@ const updateTEE = async (parameters: EquationConstantDTO[]): Promise<void> => { case AgeBracket.a15: case AgeBracket.a16: case AgeBracket.a17: { + const paramsToUpdate: EquationConstantDTO[] = []; for (let i = 1; i <= 17; i += 1) { - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[0].value }, - { - where: { - ageRange: `${i} años`, - sex: parameters[0].sex, - order: parameters[0].order, - parameterType: parameters[0].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[1].value }, - { - where: { - ageRange: `${i} años`, - sex: parameters[1].sex, - order: parameters[1].order, - parameterType: parameters[1].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; - }); - // eslint-disable-next-line no-await-in-loop - await EquationConstant.update( - { value: parameters[2].value }, - { - where: { - ageRange: `${i} años`, - sex: parameters[2].sex, - order: parameters[2].order, - parameterType: parameters[2].parameterType, - }, - }, - ).then((result) => { - if (result[0] === 0) { - throw new Error('No rows were updated.'); - } - }).catch((err) => { - throw err; + parameters.forEach((param: EquationConstantDTO) => { + paramsToUpdate.push({ + ageRange: `${i} meses` as AgeBracket, + order: param.order, + sex: param.sex, + value: param.value, + description: param.description, + parameterType: param.parameterType, + }); }); } + await EquationConstant.bulkCreate(paramsToUpdate, { + updateOnDuplicate: ['value'], + }); break; } default: {