diff --git a/__test__/ERCalculator.test.ts b/__test__/ERCalculator.test.ts index 6ab9848109747d154510a220b88e41f59324eb31..98d5f1dadddae160faa304ffd0281f2a8ac5018f 100644 --- a/__test__/ERCalculator.test.ts +++ b/__test__/ERCalculator.test.ts @@ -333,7 +333,7 @@ describe('Verificar si funciona calculo del RE para personas de 6 a 17 años', ( maternity18To29: undefined, maternity30To59: undefined, }); - }).toThrow(Error('Missing data')); + }).toThrow(Error('Missing minors\' physical activity prevalence data')); }); }); @@ -425,7 +425,7 @@ describe('Verificar si funciona calculo del RE para personas de 18 a 29 años', maternity18To29: undefined, maternity30To59: undefined, }); - }).toThrow(Error('Missing data')); + }).toThrow(Error('Missing maternity data for women aged 18 to 29')); }); it('Hombres sin pasar data de NAF', () => { expect(() => { @@ -442,7 +442,7 @@ describe('Verificar si funciona calculo del RE para personas de 18 a 29 años', maternity18To29: undefined, maternity30To59: undefined, }); - }).toThrow(Error('Missing data')); + }).toThrow(Error('Missing adults\' physical activity prevalence data')); }); }); @@ -534,7 +534,7 @@ describe('Verificar si funciona calculo del RE para personas de 30 a 59 años', maternity18To29: undefined, maternity30To59: undefined, }); - }).toThrow(Error('Missing data')); + }).toThrow(Error('Missing maternity data for women aged 30 to 59')); }); it('Hombres sin pasar data de NAF', () => { expect(() => { @@ -551,7 +551,7 @@ describe('Verificar si funciona calculo del RE para personas de 30 a 59 años', maternity18To29: undefined, maternity30To59: undefined, }); - }).toThrow(Error('Missing data')); + }).toThrow(Error('Missing adults\' physical activity prevalence data')); }); }); @@ -633,6 +633,6 @@ describe('Verificar si funciona calculo del RE para personas de mas de 60 años' maternity18To29: undefined, maternity30To59: undefined, }); - }).toThrow(Error('Missing data')); + }).toThrow(Error('Missing adults\' physical activity prevalence data')); }); }); diff --git a/__test__/ParameterService.test.ts b/__test__/ParameterService.test.ts index 86704090172e06f3846fc3acce62928939cfaf2c..50e712b210044ed5a936cb41c15cfa77e73b86b4 100644 --- a/__test__/ParameterService.test.ts +++ b/__test__/ParameterService.test.ts @@ -1,21 +1,404 @@ import '@testing-library/jest-dom/extend-expect'; import AgeBracket from '../src/Enum/AgeBracket'; +import ParameterType from '../src/Enum/ParameterType'; import Sex from '../src/Enum/Sex'; +import DefaultWeight from '../src/Models/DefaultWeight'; import ParameterService from '../src/Services/ParameterService'; +import ParameterDataBaseLoader from '../src/Loaders/ParameterDataBaseLoader'; +import DefaultExtraData from '../src/Models/DefaultExtraData'; +import EquationConstant from '../src/Models/EquationConstant'; describe('Verificar si devuelve los parametros correctamente', () => { + it('init database', async () => { + await ParameterDataBaseLoader.initParameterDataBase(); + }); it('Pesos por defecto', async () => { expect((await ParameterService.getDefaultWeights()).length).toBe(64); }); it('Datos Extra', async () => { expect((await ParameterService.getDefaultExtraData()).length).toBe(13); }); - it('Constantes de ecuacion', async () => { + it('Constantes de ecuacion varones de 1 año', async () => { expect(new Set(await ParameterService.getEquationValues(AgeBracket.a1, Sex.Male))) .toEqual(new Set([310.2, 63.3, -0.263, 13])); }); - it('Constantes de ecuacion', async () => { + it('Constantes de ecuacion mujeres de 10 años', async () => { expect(new Set(await ParameterService.getEquationValues(AgeBracket.a10, Sex.Female))) .toEqual(new Set([263.4, 65.3, -0.454, 25, -15, 15])); }); + it('Constantes de ecuacion mujeres de 2 años', async () => { + expect(new Set(await ParameterService.getEquationValues(AgeBracket.a2, Sex.Female))) + .toEqual(new Set([263.4, 65.3, -0.454, 13])); + }); + it('Constantes de ecuacion mujeres de 5 meses', async () => { + expect(new Set(await ParameterService.getEquationValues(AgeBracket.m5, Sex.Female))) + .toEqual(new Set([-152, 92.8, 47])); + }); + it('Constantes de ecuacion hombres de 7 meses', async () => { + expect(new Set(await ParameterService.getEquationValues(AgeBracket.m7, Sex.Male))) + .toEqual(new Set([-99.4, 88.6, 16])); + }); +}); + +describe('Verificar si actualiza los pesos correctamente', () => { + it('init database', async () => { + await ParameterDataBaseLoader.initParameterDataBase(); + }); + it('Actualizacion de peso mujeres 11 años', async () => { + await ParameterService.updateDefaultWeight({ + ageRange: AgeBracket.a11, + sex: Sex.Female, + parameterType: ParameterType.DefaultWeight, + value: 80, + }); + expect((await DefaultWeight.findOne({ + where: { + ageRange: AgeBracket.a11 as string, + sex: Sex.Female as string, + }, + }))?.getDataValue('value')).toEqual(80); + }); + it('Actualizacion de peso varones 18 a 29 años', async () => { + await ParameterService.updateDefaultWeight({ + ageRange: AgeBracket.a18_29, + sex: Sex.Male, + parameterType: ParameterType.DefaultWeight, + value: 200, + }); + expect((await DefaultWeight.findOne({ + where: { + ageRange: AgeBracket.a18_29 as string, + sex: Sex.Male as string, + }, + }))?.getDataValue('value')).toEqual(200); + }); + it('Actualizacion de peso mujeres 60+ años', async () => { + await ParameterService.updateDefaultWeight({ + ageRange: AgeBracket.a60, + sex: Sex.Female, + parameterType: ParameterType.DefaultWeight, + value: 20, + }); + expect((await DefaultWeight.findOne({ + where: { + ageRange: AgeBracket.a60 as string, + sex: Sex.Female as string, + }, + }))?.getDataValue('value')).toEqual(20); + }); +}); + +describe('Verificar si actualiza los datos extra correctamente', () => { + it('Actualizacion poblacion del pais por defecto', async () => { + await ParameterService.updateExtraData([{ + id: 'countryPopulation', + parameterType: ParameterType.Maternity, + value: 5000000, + description: 'epa', + order: 0, + }]); + expect((await DefaultExtraData.findOne({ + where: { + id: 'countryPopulation', + }, + }))?.getDataValue('value')).toEqual(5000000); + }); + it('Actualizacion prevalencia de NAF de menores', async () => { + await ParameterService.updateExtraData([{ + id: 'minorLowPrevalence', + parameterType: ParameterType.MinorPAL, + value: 20, + description: 'epa', + order: 0, + }, + { + id: 'minorModeratePrevalence', + parameterType: ParameterType.MinorPAL, + value: 35, + description: 'epa', + order: 0, + }, + { + id: 'minorIntensePrevalence', + parameterType: ParameterType.MinorPAL, + value: 45, + description: 'epa', + order: 0, + }]); + expect((await DefaultExtraData.findOne({ + where: { + id: 'minorLowPrevalence', + }, + }))?.getDataValue('value')).toEqual(20); + expect((await DefaultExtraData.findOne({ + where: { + id: 'minorModeratePrevalence', + }, + }))?.getDataValue('value')).toEqual(35); + expect((await DefaultExtraData.findOne({ + where: { + id: 'minorIntensePrevalence', + }, + }))?.getDataValue('value')).toEqual(45); + }); + it('Actualizacion porcentaje de poblacion rural y urbana', async () => { + await ParameterService.updateExtraData([{ + id: 'ruralPopulation', + parameterType: ParameterType.AdultPAL, + value: 44, + description: 'epa', + order: 0, + }]); + expect((await DefaultExtraData.findOne({ + where: { + id: 'ruralPopulation', + }, + }))?.getDataValue('value')).toEqual(44); + expect((await DefaultExtraData.findOne({ + where: { + id: 'urbanPopulation', + }, + }))?.getDataValue('value')).toEqual(56); + }); +}); + +describe('Verificar si actualiza las constantes de ecuaciones correctamente', () => { + it('Actualizacion energia para el crecimiento mujeres 6 años', async () => { + await ParameterService.updateGrowthEnergy({ + parameterType: ParameterType.GrowthEnergy, + ageRange: AgeBracket.a6, + sex: Sex.Female, + value: 653, + description: 'epa', + order: 3, + }); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a6, + sex: Sex.Female, + order: 3, + parameterType: ParameterType.GrowthEnergy, + }, + }))?.getDataValue('value')).toEqual(653); + }); + it('Actualizacion constantes ecuacion GET varones 15 años', async () => { + await ParameterService.updateTEE([{ + parameterType: ParameterType.TEE, + ageRange: AgeBracket.a15, + sex: Sex.Male, + value: 65.0, + description: 'epa', + order: 0, + }, + { + parameterType: ParameterType.TEE, + ageRange: AgeBracket.a15, + sex: Sex.Male, + value: 87.95, + description: 'epa', + order: 1, + }, + { + parameterType: ParameterType.TEE, + ageRange: AgeBracket.a15, + sex: Sex.Male, + value: 100.6, + description: 'epa', + order: 2, + }]); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a15, + sex: Sex.Male, + order: 0, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(65.0); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a15, + sex: Sex.Male, + order: 1, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(87.95); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a15, + sex: Sex.Male, + order: 2, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(100.6); + }); + it('Actualizacion constantes ecuacion GET varones 10 meses', async () => { + await ParameterService.updateTEE([{ + parameterType: ParameterType.TEE, + ageRange: AgeBracket.m10, + sex: Sex.Male, + value: 65.0, + description: 'epa', + order: 0, + }, + { + parameterType: ParameterType.TEE, + ageRange: AgeBracket.m10, + sex: Sex.Male, + value: 87.95, + description: 'epa', + order: 1, + }]); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.m10, + sex: Sex.Male, + order: 0, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(65.0); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.m10, + sex: Sex.Male, + order: 1, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(87.95); + }); + it('Actualizacion constantes ecuacion GET mujeres 2 meses', async () => { + await ParameterService.updateTEE([{ + parameterType: ParameterType.TEE, + ageRange: AgeBracket.m2, + sex: Sex.Female, + value: 65.0, + description: 'epa', + order: 0, + }, + { + parameterType: ParameterType.TEE, + ageRange: AgeBracket.m2, + sex: Sex.Female, + value: 87.95, + description: 'epa', + order: 1, + }]); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.m2, + sex: Sex.Female, + order: 0, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(65.0); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.m2, + sex: Sex.Female, + order: 1, + parameterType: ParameterType.TEE, + }, + }))?.getDataValue('value')).toEqual(87.95); + }); + it('Actualizacion constantes ecuacion TMB varones 30 a 59 años', async () => { + await ParameterService.updateBMR([{ + parameterType: ParameterType.BMR, + ageRange: AgeBracket.a30_59, + sex: Sex.Male, + value: 90.1, + description: 'epa', + order: 0, + }, + { + parameterType: ParameterType.BMR, + ageRange: AgeBracket.a30_59, + sex: Sex.Male, + value: 100.75, + description: 'epa', + order: 1, + }]); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a30_59, + sex: Sex.Male, + order: 0, + parameterType: ParameterType.BMR, + }, + }))?.getDataValue('value')).toEqual(90.1); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a30_59, + sex: Sex.Male, + order: 1, + parameterType: ParameterType.BMR, + }, + }))?.getDataValue('value')).toEqual(100.75); + }); + it('Actualizacion constantes ecuacion TMB varones 18 a 29 años', async () => { + await ParameterService.updateBMR([{ + parameterType: ParameterType.BMR, + ageRange: AgeBracket.a18_29, + sex: Sex.Male, + value: 90.1, + description: 'epa', + order: 0, + }, + { + parameterType: ParameterType.BMR, + ageRange: AgeBracket.a18_29, + sex: Sex.Male, + value: 100.75, + description: 'epa', + order: 1, + }]); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a18_29, + sex: Sex.Male, + order: 0, + parameterType: ParameterType.BMR, + }, + }))?.getDataValue('value')).toEqual(90.1); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a18_29, + sex: Sex.Male, + order: 1, + parameterType: ParameterType.BMR, + }, + }))?.getDataValue('value')).toEqual(100.75); + }); + it('Actualizacion constantes ecuacion TMB mujeres mayores de 60 años', async () => { + await ParameterService.updateBMR([{ + parameterType: ParameterType.BMR, + ageRange: AgeBracket.a60, + sex: Sex.Female, + value: 90.1, + description: 'epa', + order: 0, + }, + { + parameterType: ParameterType.BMR, + ageRange: AgeBracket.a60, + sex: Sex.Female, + value: 100.75, + description: 'epa', + order: 1, + }]); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a60, + sex: Sex.Female, + order: 0, + parameterType: ParameterType.BMR, + }, + }))?.getDataValue('value')).toEqual(90.1); + expect((await EquationConstant.findOne({ + where: { + ageRange: AgeBracket.a60, + sex: Sex.Female, + order: 1, + parameterType: ParameterType.BMR, + }, + }))?.getDataValue('value')).toEqual(100.75); + }); }); diff --git a/src/Loaders/DefaultWeightLoader.csv b/src/Loaders/DefaultWeightLoader.csv index 32417a4a434e91331302b8a436ca3905f18dc30d..2c8f28220e969c5c1923c5087fa1c22de6526818 100644 --- a/src/Loaders/DefaultWeightLoader.csv +++ b/src/Loaders/DefaultWeightLoader.csv @@ -1,65 +1,65 @@ age,value,sex -0 meses,3.3,Masculino,Peso por defecto -1 meses,4.5,Masculino,Peso por defecto -2 meses,5.6,Masculino,Peso por defecto -3 meses,6.4,Masculino,Peso por defecto -4 meses,7,Masculino,Peso por defecto -5 meses,7.5,Masculino,Peso por defecto -6 meses,7.9,Masculino,Peso por defecto -7 meses,8.3,Masculino,Peso por defecto -8 meses,8.6,Masculino,Peso por defecto -9 meses,8.9,Masculino,Peso por defecto -10 meses,9.2,Masculino,Peso por defecto -11 meses,9.4,Masculino,Peso por defecto -1 años,10.9,Masculino,Peso por defecto -2 años,13.3,Masculino,Peso por defecto -3 años,15.3,Masculino,Peso por defecto -4 años,17.3,Masculino,Peso por defecto -5 años,19.5,Masculino,Peso por defecto -6 años,21.8,Masculino,Peso por defecto -7 años,24.2,Masculino,Peso por defecto -8 años,26.8,Masculino,Peso por defecto -9 años,29.6,Masculino,Peso por defecto -10 años,32.9,Masculino,Peso por defecto -11 años,36.7,Masculino,Peso por defecto -12 años,41.6,Masculino,Peso por defecto -13 años,47.4,Masculino,Peso por defecto -14 años,53.7,Masculino,Peso por defecto -15 años,58.8,Masculino,Peso por defecto -16 años,63.1,Masculino,Peso por defecto -17 años,66.1,Masculino,Peso por defecto -18-29 años,67.4,Masculino,Peso por defecto -30-59 años,66.6,Masculino,Peso por defecto -60+ años,64.3,Masculino,Peso por defecto -0 meses,3.2,Femenino,Peso por defecto -1 meses,4.2,Femenino,Peso por defecto -2 meses,5.1,Femenino,Peso por defecto -3 meses,5.8,Femenino,Peso por defecto -4 meses,6.4,Femenino,Peso por defecto -5 meses,6.9,Femenino,Peso por defecto -6 meses,7.3,Femenino,Peso por defecto -7 meses,7.6,Femenino,Peso por defecto -8 meses,7.9,Femenino,Peso por defecto -9 meses,8.2,Femenino,Peso por defecto -10 meses,8.5,Femenino,Peso por defecto -11 meses,8.7,Femenino,Peso por defecto -1 años,10.2,Femenino,Peso por defecto -2 años,12.7,Femenino,Peso por defecto -3 años,15,Femenino,Peso por defecto -4 años,17.2,Femenino,Peso por defecto -5 años,19.1,Femenino,Peso por defecto -6 años,21.3,Femenino,Peso por defecto -7 años,23.7,Femenino,Peso por defecto -8 años,26.7,Femenino,Peso por defecto -9 años,29.9,Femenino,Peso por defecto -10 años,34,Femenino,Peso por defecto -11 años,38.7,Femenino,Peso por defecto -12 años,43.6,Femenino,Peso por defecto -13 años,48.1,Femenino,Peso por defecto -14 años,51.5,Femenino,Peso por defecto -15 años,53.9,Femenino,Peso por defecto -16 años,55.3,Femenino,Peso por defecto -17 años,56.3,Femenino,Peso por defecto -18-29 años,57.7,Femenino,Peso por defecto -30-59 años,56.3,Femenino,Peso por defecto -60+ años,54.2,Femenino,Peso por defecto +0 meses,3.3,Masculino +1 meses,4.5,Masculino +2 meses,5.6,Masculino +3 meses,6.4,Masculino +4 meses,7,Masculino +5 meses,7.5,Masculino +6 meses,7.9,Masculino +7 meses,8.3,Masculino +8 meses,8.6,Masculino +9 meses,8.9,Masculino +10 meses,9.2,Masculino +11 meses,9.4,Masculino +1 años,10.9,Masculino +2 años,13.3,Masculino +3 años,15.3,Masculino +4 años,17.3,Masculino +5 años,19.5,Masculino +6 años,21.8,Masculino +7 años,24.2,Masculino +8 años,26.8,Masculino +9 años,29.6,Masculino +10 años,32.9,Masculino +11 años,36.7,Masculino +12 años,41.6,Masculino +13 años,47.4,Masculino +14 años,53.7,Masculino +15 años,58.8,Masculino +16 años,63.1,Masculino +17 años,66.1,Masculino +18-29 años,67.4,Masculino +30-59 años,66.6,Masculino +60+ años,64.3,Masculino +0 meses,3.2,Femenino +1 meses,4.2,Femenino +2 meses,5.1,Femenino +3 meses,5.8,Femenino +4 meses,6.4,Femenino +5 meses,6.9,Femenino +6 meses,7.3,Femenino +7 meses,7.6,Femenino +8 meses,7.9,Femenino +9 meses,8.2,Femenino +10 meses,8.5,Femenino +11 meses,8.7,Femenino +1 años,10.2,Femenino +2 años,12.7,Femenino +3 años,15,Femenino +4 años,17.2,Femenino +5 años,19.1,Femenino +6 años,21.3,Femenino +7 años,23.7,Femenino +8 años,26.7,Femenino +9 años,29.9,Femenino +10 años,34,Femenino +11 años,38.7,Femenino +12 años,43.6,Femenino +13 años,48.1,Femenino +14 años,51.5,Femenino +15 años,53.9,Femenino +16 años,55.3,Femenino +17 años,56.3,Femenino +18-29 años,57.7,Femenino +30-59 años,56.3,Femenino +60+ años,54.2,Femenino diff --git a/src/Loaders/ParameterDataBaseLoader.ts b/src/Loaders/ParameterDataBaseLoader.ts index 111f7625498563f81f5e89079b7ab0f1d9f78a0b..b66dbde9f74159877839925ebaad31c85c411175 100644 --- a/src/Loaders/ParameterDataBaseLoader.ts +++ b/src/Loaders/ParameterDataBaseLoader.ts @@ -10,11 +10,11 @@ import DefaultWeight from '../Models/DefaultWeight'; import EquationConstant from '../Models/EquationConstant'; import CSVParser from './CSVParser'; -function initParameterDataBase(): void { +async function initParameterDataBase(): Promise<void> { let pathToFile: string = path.join(__dirname, 'DefaultWeightLoader.csv'); let csv: string = fs.readFileSync(pathToFile, 'utf8').toString(); const defaultWeights: DefaultWeightDTO[] = CSVParser.csvToDefaultWeight(csv); - DefaultWeight.sync({ force: true }).then(() => { + await DefaultWeight.sync({ force: true }).then(() => { DefaultWeight.bulkCreate(defaultWeights, { updateOnDuplicate: ['value'], }).then(() => { @@ -27,7 +27,7 @@ function initParameterDataBase(): void { pathToFile = path.join(__dirname, 'DefaultExtraDataLoader.csv'); csv = fs.readFileSync(pathToFile, 'utf8').toString(); const extraData: DefaultExtraDataDTO[] = CSVParser.csvToDefaultExtraData(csv); - DefaultExtraData.sync({ force: true }).then(() => { + await DefaultExtraData.sync({ force: true }).then(() => { DefaultExtraData.bulkCreate(extraData, { updateOnDuplicate: ['value'], }).then(() => { @@ -40,7 +40,7 @@ function initParameterDataBase(): void { pathToFile = path.join(__dirname, 'EquationConstantLoader.csv'); csv = fs.readFileSync(pathToFile, 'utf8').toString(); const equationConstant: EquationConstantDTO[] = CSVParser.csvToEquationConstant(csv); - EquationConstant.sync({ force: true }).then(() => { + await EquationConstant.sync({ force: true }).then(() => { EquationConstant.bulkCreate(equationConstant, { updateOnDuplicate: ['value'], }).then(() => { diff --git a/src/Services/ParameterService.ts b/src/Services/ParameterService.ts index 06290043fca28b3d5374e82091b7a7d916296e72..6fc7e6632aa461d01f1e8a37f19593d97bf40554 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} años` 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: { @@ -540,7 +349,6 @@ const updateDefaultWeight = async (parameter: DefaultWeightDTO): Promise<void> = where: { ageRange: parameter.ageRange, sex: parameter.sex, - parameterType: parameter.parameterType, }, }, ).then((result) => { diff --git a/swagger.yaml b/swagger.yaml index 07161ac1beff8bb7b2b061a521b7cb5527c35b90..5399dd1477070a86afd719bf98279fad065e868a 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -77,7 +77,7 @@ paths: security: - BearerAuth: [] /parameters/weights: - post: + get: tags: - Parameters summary: Get all default weights @@ -89,7 +89,7 @@ paths: security: - BearerAuth: [] /parameters/extraData: - post: + get: tags: - Parameters summary: Get all extra data