diff --git a/.env b/.env index 0efeaa73b19403be4d206de6b8274dfc447b4926..2f26ed02da8b5ec45b282490c9443c541e04f4c7 100644 --- a/.env +++ b/.env @@ -1,2 +1,6 @@ PORT=8000 -INSTANCE=PROD \ No newline at end of file +INSTANCE=PROD +HOST=localhost +USER=root +PASSWORD=rootroot +DB=parameter_database \ No newline at end of file diff --git a/.gitignore b/.gitignore index c6bdbb76309d8f805e24c9ab3df8f1ffde34d075..6d6dd69a02336f5b6ef67682f6e96f8f805e91de 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ build npm-debug.log .DS_Store logs/ + +.env diff --git a/src/Config/Constants.ts b/src/Config/Constants.ts index 337ad28868f7d7644c20f3507cdfa12582227d5d..7331d938932caff351d34e3c0b8dca09244b47f8 100644 --- a/src/Config/Constants.ts +++ b/src/Config/Constants.ts @@ -4,3 +4,29 @@ export const SheetNames = { HOMBRES_MENORES: 'Hombres<1', MUJERES_MENORES: 'Mujeres<1', }; + +export const extraDataIDs: {[key: string]: string} = { + minLowPrev: 'minorLowPrevalence', + minModPrev: 'minorModeratePrevalence', + minIntPrev: 'minorIntensePrevalence', + lowPercDiff: 'lowPercentageDifference', + intPercDiff: 'intensePercentageDifference', + urbPopPerc: 'urbanPopulation', + rurPopPerc: 'ruralPopulation', + urbAdultActPerc: 'urbanActivePALPercentage', + urbAdultLowPerc: 'urbanLowPALPercentage', + rurAdultActPerc: 'ruralActivePALPercentage', + rurAdultLowPerc: 'ruralLowPALPercentage', + urbAdultActVal: 'ruralActivePALValue', + urbAdultLowVal: 'ruralLowPALValue', + rurAdultActVal: 'urbanActivePALValue', + rurAdultLowVal: 'urbanLowPALValue', + popCountry: 'countryPopulation', + pop18to29Fem: '18to29FemaleCountryPopulation', + pop30to59Fem: '30to59FemaleCountryPopulation', + birthRate: 'birthRate', + extraEnergyPreg18to29: 'pregnancyExtraEnergy18to29', + extraEnergyLact18to29: 'lactationExtraEnergy18to29', + extraEnergyPreg30to59: 'pregnancyExtraEnergy30to59', + extraEnergyLact30to59: 'lactationExtraEnergy30to59', +}; diff --git a/src/Config/DBConfig.ts b/src/Config/DBConfig.ts deleted file mode 100644 index ddd9d64e490508284986414c5e5181364fb75260..0000000000000000000000000000000000000000 --- a/src/Config/DBConfig.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const DBConfig = { - HOST: 'localhost', - USER: 'root', - PASSWORD: 'password', // antes decia 'password' - DB: 'parameter_database', - dialect: 'mysql', -}; diff --git a/src/Controllers/CalculatorController.ts b/src/Controllers/CalculatorController.ts index 91db8387271d961d2b9691c5d8fe151fd206ce3d..8cbdaa210b0ac29485bdaf55c2d1e61640666f2f 100644 --- a/src/Controllers/CalculatorController.ts +++ b/src/Controllers/CalculatorController.ts @@ -14,9 +14,8 @@ const { validate } = new Validator({}); const getREP: Handler = async (req: Request, res: Response) => { const { groups, extraData } = req.body; try { - // sry pero no sabia como sacarle un caracter a esa linea :( - // eslint-disable-next-line max-len - const EnergyReq: CalculatorResponse = await CalculatorService.calculateEnergeticRequirement(groups, extraData); + const EnergyReq: CalculatorResponse = await CalculatorService + .calculateEnergeticRequirement(groups, extraData); return res.status(200).send(EnergyReq); } catch (error) { const e = error as Error; diff --git a/src/Controllers/ParameterController.ts b/src/Controllers/ParameterController.ts index 2fc04f00f65704449e2f085cc22ebb5726d6648d..2586a27c883c064a4c46f27b04ad25594704c430 100644 --- a/src/Controllers/ParameterController.ts +++ b/src/Controllers/ParameterController.ts @@ -45,25 +45,21 @@ const getDefaultExtraData: Handler = async (req: Request, res: Response) => { }; const updateParameterValue: Handler = async (req: Request, res: Response) => { - const { parameter } = req.body; + const { parameters } = req.body; try { - switch (parameter.parameterType) { + switch (parameters[0].parameterType) { case ParameterType.DefaultWeight: - await ParameterService.updateDefaultWeight( - parameter.ageRange, parameter.sex, parameter.value, - ); + await ParameterService.updateDefaultWeight(parameters[0]); break; case ParameterType.MinorPAL: case ParameterType.AdultPAL: case ParameterType.Maternity: - await ParameterService.updateExtraData(parameter.id, parameter.value); + await ParameterService.updateExtraData(parameters); break; case ParameterType.TEE: case ParameterType.BMR: case ParameterType.GrowthEnergy: - await ParameterService.updateEquationConstant( - parameter.ageRange, parameter.sex, parameter.order, parameter.value, - ); + await ParameterService.updateEquationConstant(parameters[0]); break; default: break; diff --git a/src/Controllers/SheetController.ts b/src/Controllers/SheetController.ts index 727fc2700141838ffbac52798702d4a67f5a7e56..9b4d63138b64b2290f2300e506b8eaaf51715153 100644 --- a/src/Controllers/SheetController.ts +++ b/src/Controllers/SheetController.ts @@ -1,7 +1,6 @@ import { Handler, Request, Response, Router, } from 'express'; -import { SheetParserResponse } from '../Models/SheetParserResponse'; import SheetService from '../Services/SheetService'; import logger from '../Logger/logger'; import AgeGroupJSON from '../DTOs/AgeGroupJSON'; diff --git a/src/DAOs/README.txt b/src/DAOs/README.txt deleted file mode 100644 index 592fbaaa66ae405b77df5a770b66992be443a910..0000000000000000000000000000000000000000 --- a/src/DAOs/README.txt +++ /dev/null @@ -1 +0,0 @@ -Aca van los DAOs, los daos son los archivos que tienen comunicacion directa con la BD. Ningun otro archivo que no sea un dao puede tener acceso directo a la BD \ No newline at end of file diff --git a/src/DTOs/AgeGroupJSON.ts b/src/DTOs/AgeGroupJSON.ts index 6459407ed0aac27ae9791ca069d5295b45137859..6b774a10a0d341dbf49d9f530d4fccd9bd231962 100644 --- a/src/DTOs/AgeGroupJSON.ts +++ b/src/DTOs/AgeGroupJSON.ts @@ -1,8 +1,8 @@ type AgeGroupJSON = { - age: string; // TODO: check enum + age: string; sex: string; - medianWeight: number; // TODO: check if it can be number again - population: number; // TODO: check if it can be number again + medianWeight: number; + population: number; }; export default AgeGroupJSON; diff --git a/src/Interfaces/README.txt b/src/Interfaces/README.txt deleted file mode 100644 index 0ea96f66dda63f5611c7f5562dfea9e144f65389..0000000000000000000000000000000000000000 --- a/src/Interfaces/README.txt +++ /dev/null @@ -1 +0,0 @@ -Aca van las interfaces, acordarse de como nombrarlas, esta en el documento en Teams \ No newline at end of file diff --git a/src/Loaders/ParameterDataBase.ts b/src/Loaders/ParameterDataBase.ts index d6d458f7d0103e35e9a36340a2491e48d1f59d27..7add75166c89ea7251288345b6d92599c7b96b51 100644 --- a/src/Loaders/ParameterDataBase.ts +++ b/src/Loaders/ParameterDataBase.ts @@ -1,16 +1,21 @@ import { Sequelize } from 'sequelize'; -import { DBConfig } from '../Config/DBConfig'; + +const DB: string = process.env.DB || 'parameter_database'; +const USER: string = process.env.USER || 'root'; +const PASSWORD: string = process.env.PASSWORD || 'password'; +const HOST: string = process.env.HOST || 'localhost'; const sequelize = new Sequelize( - DBConfig.DB, - DBConfig.USER, - DBConfig.PASSWORD, + DB, + USER, + PASSWORD, { - host: DBConfig.HOST, + host: HOST, dialect: 'mysql', dialectOptions: { multipleStatements: true, }, + logging: false, }, ); diff --git a/src/Loaders/ParameterDataBaseLoader.ts b/src/Loaders/ParameterDataBaseLoader.ts index f086c2118402a6c8e08bb2d188cb1567e814a901..560d0fbc2cd3d60d2d0f5c8f1c6ff6b98a86c285 100644 --- a/src/Loaders/ParameterDataBaseLoader.ts +++ b/src/Loaders/ParameterDataBaseLoader.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import fs from 'fs'; import path from 'path'; import DefaultExtraDataDTO from '../DTOs/DefaultExtraDataDTO'; diff --git a/src/Schemas/getRepBody.ts b/src/Schemas/getRepBody.ts index 3eeb9e715be29a113683b565b7a70d89b23d6dbe..deadbe2ba3bb2a80f9aa1925f2855debf7578afd 100644 --- a/src/Schemas/getRepBody.ts +++ b/src/Schemas/getRepBody.ts @@ -13,12 +13,15 @@ const getRepBody = { }, sex: { type: 'string' as const, + pattern: '(^Masculino$)|(^Femenino$)', }, medianWeight: { type: 'number' as const, + minimum: 0, }, population: { type: 'number' as const, + minumum: 0, }, }, }, @@ -32,12 +35,18 @@ const getRepBody = { properties: { lowPALPrevalence: { type: 'number' as const, + minimum: 0, + maximum: 100, }, moderatePALPrevalence: { type: 'number' as const, + minimum: 0, + maximum: 100, }, intensePALPrevalence: { type: 'number' as const, + minimum: 0, + maximum: 100, }, }, }, @@ -45,22 +54,61 @@ const getRepBody = { type: 'object' as const, required: ['urbanPercentage', 'activeUrbanPAL', 'lowUrbanPAL', 'ruralPercentage', 'activeRuralPAL', 'lowRuralPAL'], properties: { - urbanPercentage: { type: 'number' as const }, - activeUrbanPAL: { type: 'number' as const }, - lowUrbanPAL: { type: 'number' as const }, - ruralPercentage: { type: 'number' as const }, - activeRuralPAL: { type: 'number' as const }, - lowRuralPAL: { type: 'number' as const }, + urbanPercentage: { + type: 'number' as const, + minimum: 0, + maximum: 100, + }, + activeUrbanPAL: { + type: 'number' as const, + minimum: 0, + maximum: 100, + }, + lowUrbanPAL: { + type: 'number' as const, + minimum: 0, + maximum: 100, + }, + ruralPercentage: { + type: 'number' as const, + minimum: 0, + maximum: 100, + }, + activeRuralPAL: { + type: 'number' as const, + minimum: 0, + maximum: 100, + }, + lowRuralPAL: { + type: 'number' as const, + minimum: 0, + maximum: 100, + }, }, }, maternity18To29: { type: 'object' as const, properties: { - pregnantWomen: { type: 'number' as const }, - lactatingWomen: { type: 'number' as const }, - countryBirthRate: { type: 'number' as const }, - countryWomenInAgeGroup: { type: 'number' as const }, - countryPopulation: { type: 'number' as const }, + pregnantWomen: { + type: 'number' as const, + minimum: 0, + }, + lactatingWomen: { + type: 'number' as const, + minimum: 0, + }, + countryBirthRate: { + type: 'number' as const, + minimum: 0, + }, + countryWomenInAgeGroup: { + type: 'number' as const, + exclusiveMinimum: 0, + }, + countryPopulation: { + type: 'number' as const, + exclusiveMinimum: 0, + }, }, oneOf: [ { @@ -74,11 +122,26 @@ const getRepBody = { maternity30To59: { type: 'object' as const, properties: { - pregnantWomen: { type: 'number' as const }, - lactatingWomen: { type: 'number' as const }, - countryBirthRate: { type: 'number' as const }, - countryWomenInAgeGroup: { type: 'number' as const }, - countryPopulation: { type: 'number' as const }, + pregnantWomen: { + type: 'number' as const, + minimum: 0, + }, + lactatingWomen: { + type: 'number' as const, + minimum: 0, + }, + countryBirthRate: { + type: 'number' as const, + minimum: 0, + }, + countryWomenInAgeGroup: { + type: 'number' as const, + exclusiveMinimum: 0, + }, + countryPopulation: { + type: 'number' as const, + exclusiveMinimum: 0, + }, }, oneOf: [ { diff --git a/src/Schemas/updateParameterValueBody.ts b/src/Schemas/updateParameterValueBody.ts index d46e0e29c5c0c28b60a10bdf0166bc1b24acfb1f..048b17e3d636a4174702c20a04e8486db911a217 100644 --- a/src/Schemas/updateParameterValueBody.ts +++ b/src/Schemas/updateParameterValueBody.ts @@ -1,43 +1,57 @@ const updateParameterValueBody = { type: 'object' as const, - required: ['parameter'], + required: ['parameters'], properties: { - parameter: { - type: 'object' as const, - properties: { - ageRange: { - type: 'string' as const, - }, - sex: { - type: 'string' as const, - }, - id: { - type: 'string' as const, - }, - value: { - type: 'number' as const, - }, - parameterType: { - type: 'string' as const, - }, - order: { - type: 'number' as const, - }, - description: { - type: 'string' as const, - }, + parameters: { + type: 'array' as const, + items: { + type: 'object' as const, + properties: { + ageRange: { + type: 'string' as const, + }, + sex: { + type: 'string' as const, + pattern: '(^Masculino$)|(^Femenino$)', + }, + id: { + type: 'string' as const, + }, + value: { + type: 'number' as const, + }, + order: { + type: 'number' as const, + minimum: 0, + }, + description: { + type: 'string' as const, + }, + }, + anyOf: [ + { + parameterType: { + type: 'string' as const, + pattern: '(^TMB$)|(^GET$)|(^Energia para crecimiento$)', + }, + required: ['parameterType', 'ageRange', 'sex', 'order', 'value'], + }, + { + parameterType: { + type: 'string' as const, + pattern: '^Peso por defecto$', + }, + required: ['parameterType', 'ageRange', 'sex', 'value'], + }, + { + parameterType: { + type: 'string' as const, + pattern: '(^NAF Menores$)|(^NAF Adultos$)|(^Embarazo y lactancia$)', + }, + required: ['parameterType', 'id', 'value'], + }, + ], }, - oneOf: [ - { - required: ['parameterType', 'ageRange', 'sex', 'value'], - }, - { - required: ['parameterType', 'id', 'value'], - }, - { - required: ['parameterType', 'ageRange', 'sex', 'order', 'value'], - }, - ], }, }, }; diff --git a/src/Services/ERCalculator.ts b/src/Services/ERCalculator.ts index 3b98680e09d1f1d5c774595cde7e3fdf8a6409c2..3654ca3f2d8fc86bd2c6fc5019c3c8d4ff073637 100644 --- a/src/Services/ERCalculator.ts +++ b/src/Services/ERCalculator.ts @@ -24,8 +24,7 @@ const calculateTEE = (group: AgeGroup, params: number[], preval: MinorPAL): numb const prevalCheck: number = preval.intensePALPrevalence + preval.lowPALPrevalence + preval.moderatePALPrevalence; - if (prevalCheck !== 100 || preval.intensePALPrevalence < 0 - || preval.moderatePALPrevalence < 0 || preval.lowPALPrevalence < 0) { + if (prevalCheck !== 100) { throw new Error('Minor PAL data does not respect format'); } @@ -36,11 +35,9 @@ const calculateTEE = (group: AgeGroup, params: number[], preval: MinorPAL): numb const teeLow: number = teeModerate + (teeModerate * params[4]) / 100; const teeIntense: number = teeModerate + (teeModerate * params[5]) / 100; - const ret: number = (teeLow * preval.lowPALPrevalence) / 100 + return (teeLow * preval.lowPALPrevalence) / 100 + (teeModerate * preval.moderatePALPrevalence) / 100 + (teeIntense * preval.intensePALPrevalence) / 100; - - return ret; }; // BMR (Basal Metabolic Rate) = TMB (Tasa Metabolica Basal) @@ -54,10 +51,7 @@ const calculatePAL = (params: number[], popData: AdultPAL): number => { const popCheck: number = popData.ruralPercentage + popData.urbanPercentage; const urbanPALCheck: number = popData.activeUrbanPAL + popData.lowUrbanPAL; const ruralPALCheck: number = popData.activeRuralPAL + popData.lowRuralPAL; - if (popCheck !== 100 || urbanPALCheck !== 100 || ruralPALCheck !== 100 - || popData.ruralPercentage < 0 || popData.urbanPercentage < 0 - || popData.activeUrbanPAL < 0 || popData.lowUrbanPAL < 0 - || popData.activeRuralPAL < 0 || popData.lowRuralPAL < 0) { + if (popCheck !== 100 || urbanPALCheck !== 100 || ruralPALCheck !== 100) { throw new Error('Adult PAL data does not respect format'); } @@ -74,7 +68,7 @@ const calculatePAL = (params: number[], popData: AdultPAL): number => { // eslint-disable-next-line max-len const calculateERWomenIndividual = (group: AgeGroup, params: number[], popData: IndividualMaternity, req: number): number => { const popCheck: number = popData.lactatingWomen + popData.pregnantWomen; - if (popCheck > group.population || popData.lactatingWomen < 0 || popData.pregnantWomen < 0) { + if (popCheck > group.population) { throw new Error('Individual Maternity does not respect format'); } @@ -90,10 +84,7 @@ const calculateERWomenIndividual = (group: AgeGroup, params: number[], popData: // eslint-disable-next-line max-len const calculateERWomenPopulation = (params: number[], popData: PopulationMaternity, req: number): number => { - if (popData.countryWomenInAgeGroup > popData.countryPopulation - || typeof (popData.countryBirthRate) !== 'number' || popData.countryBirthRate < 0 - || typeof (popData.countryWomenInAgeGroup) !== 'number' || popData.countryWomenInAgeGroup < 0 - || typeof (popData.countryPopulation) !== 'number' || popData.countryPopulation < 0) { + if (popData.countryWomenInAgeGroup > popData.countryPopulation) { throw new Error('Population Maternity does not respect format'); } @@ -140,7 +131,7 @@ const calculate1To5Years = (group: AgeGroup, params: number[]): GroupEnergeticRe const calculate6To17Years = (group: AgeGroup, params: number[], data: ExtraData): GroupEnergeticRequirement => { let tee: number; if (typeof (data.minorPAL) === 'undefined') { - throw new Error('Missing data'); + throw new Error('Missing minors\' physical activity prevalence data'); } else { tee = calculateTEE(group, params, data.minorPAL); } @@ -161,7 +152,7 @@ const calculate18To29Years = (group: AgeGroup, params: number[], data: ExtraData let bmr: number; let pal: number; if (typeof (data.adultPAL) === 'undefined') { - throw new Error('Missing data'); + throw new Error('Missing adults\' physical activity prevalence data'); } else { bmr = calculateBMR(group, params); pal = calculatePAL(params, data.adultPAL); @@ -173,7 +164,7 @@ const calculate18To29Years = (group: AgeGroup, params: number[], data: ExtraData // the extra energy required by women that are pregnant or lactating if (group.sex === Sex.Female) { if (data.maternity18To29 === undefined) { - throw new Error('Missing data'); + throw new Error('Missing maternity data for women aged 18 to 29'); } else if (isIndividualMaternity(data.maternity18To29)) { requirement = calculateERWomenIndividual(group, params, data.maternity18To29, requirement); } else { @@ -195,7 +186,7 @@ const calculate30To59Years = (group: AgeGroup, params: number[], data: ExtraData let bmr: number; let pal: number; if (typeof (data.adultPAL) === 'undefined') { - throw new Error('Missing data'); + throw new Error('Missing adults\' physical activity prevalence data'); } else { bmr = calculateBMR(group, params); pal = calculatePAL(params, data.adultPAL); @@ -207,7 +198,7 @@ const calculate30To59Years = (group: AgeGroup, params: number[], data: ExtraData // the extra energy required by women that are pregnant or lactating if (group.sex === Sex.Female) { if (typeof (data.maternity30To59) === 'undefined') { - throw new Error('Missing data'); + throw new Error('Missing maternity data for women aged 30 to 59'); } else if (isIndividualMaternity(data.maternity30To59)) { requirement = calculateERWomenIndividual(group, params, data.maternity30To59, requirement); } else { @@ -229,7 +220,7 @@ const calculate60PlusYears = (group: AgeGroup, params: number[], data: ExtraData let bmr: number; let pal: number; if (typeof (data.adultPAL) === 'undefined') { - throw new Error('Missing data'); + throw new Error('Missing adults\' physical activity prevalence data'); } else { bmr = calculateBMR(group, params); pal = calculatePAL(params, data.adultPAL); @@ -254,7 +245,6 @@ const calculateER = (groupParameters: Map<number[], AgeGroup>, data: ExtraData): const requirements: GroupEnergeticRequirement[] = []; groupParameters.forEach((group: AgeGroup, params: number[]) => { - totalOfPeople += group.population; let groupRequirement: GroupEnergeticRequirement; switch (group.age) { case AgeBracket.m0: @@ -262,14 +252,20 @@ const calculateER = (groupParameters: Map<number[], AgeGroup>, data: ExtraData): case AgeBracket.m2: case AgeBracket.m3: case AgeBracket.m4: - case AgeBracket.m5: + case AgeBracket.m5: { + groupRequirement = calculateLessThanAYear(group, params); + break; + } case AgeBracket.m6: case AgeBracket.m7: case AgeBracket.m8: case AgeBracket.m9: case AgeBracket.m10: - case AgeBracket.m11: { + case AgeBracket.m11: + { + totalOfPeople += group.population; groupRequirement = calculateLessThanAYear(group, params); + totalRequirement += groupRequirement.total; break; } case AgeBracket.a1: @@ -277,7 +273,9 @@ const calculateER = (groupParameters: Map<number[], AgeGroup>, data: ExtraData): case AgeBracket.a3: case AgeBracket.a4: case AgeBracket.a5: { + totalOfPeople += group.population; groupRequirement = calculate1To5Years(group, params); + totalRequirement += groupRequirement.total; break; } case AgeBracket.a6: @@ -292,31 +290,38 @@ const calculateER = (groupParameters: Map<number[], AgeGroup>, data: ExtraData): case AgeBracket.a15: case AgeBracket.a16: case AgeBracket.a17: { + totalOfPeople += group.population; groupRequirement = calculate6To17Years(group, params, data); + totalRequirement += groupRequirement.total; break; } case AgeBracket.a18_29: { + totalOfPeople += group.population; groupRequirement = calculate18To29Years(group, params, data); + totalRequirement += groupRequirement.total; break; } case AgeBracket.a30_59: { + totalOfPeople += group.population; groupRequirement = calculate30To59Years(group, params, data); + totalRequirement += groupRequirement.total; break; } case AgeBracket.a60: { + totalOfPeople += group.population; groupRequirement = calculate60PlusYears(group, params, data); + totalRequirement += groupRequirement.total; break; } default: { - throw new Error('Parsing error, attribute edad does not respect format'); + throw new Error(`Parsing error, attribute edad does not respect format. ${group.age} is not a valid age bracket.`); } } - totalRequirement += groupRequirement.total; requirements.push(groupRequirement); }); const totalER: EnergeticRequirement = { - perCapita: totalRequirement / totalOfPeople, + perCapita: Math.round(totalRequirement / totalOfPeople), total: totalRequirement, totalPopulation: totalOfPeople, }; diff --git a/src/Services/ParameterService.ts b/src/Services/ParameterService.ts index 194cd53ed392969741a397e23e00f4d20bf06ce8..85e69c0f27fab6e8012e737f4658af6e9c5af7dd 100644 --- a/src/Services/ParameterService.ts +++ b/src/Services/ParameterService.ts @@ -9,6 +9,14 @@ import EquationConstant from '../Models/EquationConstant'; import DefaultWeight from '../Models/DefaultWeight'; import DefaultWeightDTO from '../DTOs/DefaultWeightDTO'; import ParameterWrapperDTO from '../DTOs/ParameterWrapperDTO'; +import { extraDataIDs } from '../Config/Constants'; + +const pushExtraData = (rows: DefaultExtraData[], arr: number[]): void => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + arr.push(constant.value); + }); +}; const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<number[]> => { const res: number[] = []; @@ -46,10 +54,7 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb order: [['order', 'ASC']], }) .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); + pushExtraData(rows, res); }); break; } @@ -70,12 +75,8 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb order: [['order', 'ASC']], }) .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); + pushExtraData(rows, res); }); - console.log(res); } else { await DefaultExtraData.findAll({ where: { @@ -87,10 +88,7 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb order: [['order', 'ASC']], }) .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); + pushExtraData(rows, res); }); } break; @@ -112,12 +110,8 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb order: [['order', 'ASC']], }) .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); + pushExtraData(rows, res); }); - console.log(res); } else { await DefaultExtraData.findAll({ where: { @@ -129,10 +123,7 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb order: [['order', 'ASC']], }) .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); + pushExtraData(rows, res); }); } break; @@ -148,10 +139,7 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb order: [['order', 'ASC']], }) .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); + pushExtraData(rows, res); }); break; } @@ -208,15 +196,14 @@ const getParameters = async (): Promise<ParameterWrapperDTO> => { return res; }; -const updateEquationConstant = async (age: AgeBracket, s: Sex, ord: number, val: number): -Promise<void> => { +const updateEquationConstant = async (parameter: EquationConstantDTO): Promise<void> => { await EquationConstant.update( - { value: val }, + { value: parameter.value }, { where: { - ageRange: age, - sex: s, - order: ord, + ageRange: parameter.ageRange, + sex: parameter.sex, + order: parameter.order, }, }, ).catch((err) => { @@ -224,13 +211,13 @@ Promise<void> => { }); }; -const updateDefaultWeight = async (age: AgeBracket, s: Sex, val: number): Promise<void> => { +const updateDefaultWeight = async (parameter: DefaultWeightDTO): Promise<void> => { await DefaultWeight.update( - { value: val }, + { value: parameter.value }, { where: { - ageRange: age, - sex: s, + ageRange: parameter.ageRange, + sex: parameter.sex, }, }, ).catch((err) => { @@ -238,17 +225,118 @@ const updateDefaultWeight = async (age: AgeBracket, s: Sex, val: number): Promis }); }; -const updateExtraData = async (identifier: string, val: number): Promise<void> => { +const updatePercentage = async (params: DefaultExtraDataDTO[], total: number): Promise<void> => { + if (total === 100) { + // No se mete en un for porque hay problemas con el await + await DefaultExtraData.update( + { value: params[0].value }, + { + where: { + id: params[0].id, + }, + }, + ).catch((err) => { + throw err; + }); + await DefaultExtraData.update( + { value: params[1].value }, + { + where: { + id: params[1].id, + }, + }, + ).catch((err) => { + throw err; + }); + await DefaultExtraData.update( + { value: params[2].value }, + { + where: { + id: params[2].id, + }, + }, + ).catch((err) => { + throw err; + }); + } else { + throw new Error('These percentages must add up to 100'); + } +}; + +const updatePair = async (param: DefaultExtraDataDTO, pairID: string): Promise<void> => { await DefaultExtraData.update( - { value: val }, + { value: param.value }, { where: { - id: identifier, + id: param.id, }, }, ).catch((err) => { throw err; }); + await DefaultExtraData.update( + { value: (100 - param.value) }, + { + where: { + id: pairID, + }, + }, + ).catch((err) => { + throw err; + }); +}; + +const validateID = (id: string): boolean => { + const keys: string[] = Object.keys(extraDataIDs); + for (let i = 0; i < keys.length; i += 1) { + if (extraDataIDs[keys[i]] === id) { + return true; + } + } + return false; +}; + +const updateExtraData = async (parameters: DefaultExtraDataDTO[]): Promise<void> => { + const ids: string[] = []; + let total = 0; + + parameters.forEach((param: DefaultExtraDataDTO) => { + ids.push(param.id); + total += param.value; + }); + + if (ids.includes(extraDataIDs.minLowPrev)) { + if (ids.includes(extraDataIDs.minModPrev) && ids.includes(extraDataIDs.minIntPrev)) { + await updatePercentage(parameters, total); + } else { + throw new Error('Missing parameter for update'); + } + } else if (ids.includes(extraDataIDs.urbPopPerc)) { + await updatePair(parameters[0], extraDataIDs.rurPopPerc); + } else if (ids.includes(extraDataIDs.rurPopPerc)) { + await updatePair(parameters[0], extraDataIDs.urbPopPerc); + } else if (ids.includes(extraDataIDs.urbAdultActPerc)) { + await updatePair(parameters[0], extraDataIDs.urbAdultLowPerc); + } else if (ids.includes(extraDataIDs.urbAdultLowPerc)) { + await updatePair(parameters[0], extraDataIDs.urbAdultActPerc); + } else if (ids.includes(extraDataIDs.rurAdultActPerc)) { + await updatePair(parameters[0], extraDataIDs.rurAdultLowPerc); + } else if (ids.includes(extraDataIDs.rurAdultLowPerc)) { + await updatePair(parameters[0], extraDataIDs.rurAdultActPerc); + } else if (validateID(parameters[0].id)) { + await DefaultExtraData.update( + { value: parameters[0].value }, + { + where: { + id: parameters[0].id, + }, + }, + ).catch((err) => { + throw err; + }); + } else { + throw new Error('Invalid parameter ID'); + } }; export default { @@ -260,334 +348,3 @@ export default { updateDefaultWeight, updateExtraData, }; - -// const getEquationValues = (ageBracket: AgeBracket, sex: Sex): number[] => { -// let res: number[] = []; -// switch (ageBracket) { -// case (AgeBracket.m0): { -// if (sex === Sex.Male) { -// // -152 + (92.8*MP) + 211 -// res = [-152, 92.8, 211]; -// } else if (sex === Sex.Female) { -// // -152 + (92.8*MP) + 178 -// res = [-152, 92.8, 178]; -// } -// break; -// } -// case (AgeBracket.m1): { -// if (sex === Sex.Male) { -// // -152 + (92.8*MP) + 183 -// res = [-152, 92.8, 183]; -// } else if (sex === Sex.Female) { -// // -152 + (92.8*MP) + 161 -// res = [-152, 92.8, 161]; -// } -// break; -// } -// case (AgeBracket.m2): { -// if (sex === Sex.Male) { -// // -152 + (92.8*MP) + 139 -// res = [-152, 92.8, 139]; -// } else if (sex === Sex.Female) { -// // -152 + (92.8*MP) + 134 -// res = [-152, 92.8, 134]; -// } -// break; -// } -// case (AgeBracket.m3): { -// if (sex === Sex.Male) { -// // -152 + (92.8*MP) + 53 -// res = [-152, 92.8, 53]; -// } else if (sex === Sex.Female) { -// // -152 + (92.8*MP) + 68 -// res = [-152, 92.8, 68]; -// } -// break; -// } -// case (AgeBracket.m4): { -// if (sex === Sex.Male) { -// // -152 + (92.8*MP) + 46 -// res = [-152, 92.8, 46]; -// } else if (sex === Sex.Female) { -// // -152 + (92.8*MP) + 57 -// res = [-152, 92.8, 57]; -// } -// break; -// } -// case (AgeBracket.m5): { -// if (sex === Sex.Male) { -// // -152 + (92.8*MP) + 36 -// res = [-152, 92.8, 36]; -// } else if (sex === Sex.Female) { -// // -152 + (92.8*MP) + 47 -// res = [-152, 92.8, 47]; -// } -// break; -// } -// case (AgeBracket.m6): { -// if (sex === Sex.Male) { -// // -99.4 + (88.6*MP) + 17 -// res = [-99.4, 88.6, 17]; -// } else if (sex === Sex.Female) { -// // -99.4 + (88.6*MP) + 20 -// res = [-99.4, 88.6, 20]; -// } -// break; -// } -// case (AgeBracket.m7): { -// if (sex === Sex.Male) { -// // -99.4 + (88.6*MP) + 16 -// res = [-99.4, 88.6, 16]; -// } else if (sex === Sex.Female) { -// // -99.4 + (88.6*MP) + 17 -// res = [-99.4, 88.6, 17]; -// } -// break; -// } -// case (AgeBracket.m8): { -// if (sex === Sex.Male) { -// // -99.4 + (88.6*MP) + 14 -// res = [-99.4, 88.6, 14]; -// } else if (sex === Sex.Female) { -// // -99.4 + (88.6*MP) + 15 -// res = [-99.4, 88.6, 15]; -// } -// break; -// } -// case (AgeBracket.m9): { -// if (sex === Sex.Male) { -// // -99.4 + (88.6*MP) + 21 -// res = [-99.4, 88.6, 21]; -// } else if (sex === Sex.Female) { -// // -99.4 + (88.6*MP) + 18 -// res = [-99.4, 88.6, 18]; -// } -// break; -// } -// case (AgeBracket.m10): { -// if (sex === Sex.Male) { -// // -99.4 + (88.6*MP) + 21 -// res = [-99.4, 88.6, 21]; -// } else if (sex === Sex.Female) { -// // -99.4 + (88.6*MP) + 15 -// res = [-99.4, 88.6, 15]; -// } -// break; -// } -// case (AgeBracket.m11): { -// if (sex === Sex.Male) { -// // -99.4 + (88.6*MP) + 22 -// res = [-99.4, 88.6, 22]; -// } else if (sex === Sex.Female) { -// // -99.4 + (88.6*MP) + 14 -// res = [-99.4, 88.6, 14]; -// } -// break; -// } -// case (AgeBracket.a1): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 13 -// res = [310.2, 63.3, -0.263, 13]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 13 -// res = [263.4, 65.3, -0.454, 13]; -// } -// break; -// } -// case (AgeBracket.a2): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 12 -// res = [310.2, 63.3, -0.263, 12]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 13 -// res = [263.4, 65.3, -0.454, 13]; -// } -// break; -// } -// case (AgeBracket.a3): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 12 -// res = [310.2, 63.3, -0.263, 12]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 11 -// res = [263.4, 65.3, -0.454, 11]; -// } -// break; -// } -// case (AgeBracket.a4): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 11 -// res = [310.2, 63.3, -0.263, 11]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 10 -// res = [263.4, 65.3, -0.454, 10]; -// } -// break; -// } -// case (AgeBracket.a5): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 11 -// res = [310.2, 63.3, -0.263, 11]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 10 -// res = [263.4, 65.3, -0.454, 10]; -// } -// break; -// } -// case (AgeBracket.a6): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 11, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 12, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 10, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 13, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a7): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 14, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 14, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 17, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 17, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a8): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 16, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 16, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 20, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 20, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a9): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 19, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 19, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 23, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 23, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a10): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 22, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 22, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 25, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 25, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a11): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 25, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 25, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 25, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 25, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a12): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 29, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 29, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 26, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 26, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a13): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 33, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 33, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 24, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 24, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a14): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 33, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 33, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 19, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 19, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a15): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 31, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 31, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 13, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 13, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a16): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 24, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 24, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 5, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 5, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a17): { -// if (sex === Sex.Male) { -// // 310.2 + (63.3*MP) - 0.263*MP^2 + 14, -15%/+15% for light/intense TEE -// res = [310.2, 63.3, -0.263, 14, 15, 15]; -// } else if (sex === Sex.Female) { -// // 263.4 + (65.3*MP) - 0.454*MP^2 + 0, -15%/+15% for light/intense TEE -// res = [263.4, 65.3, -0.454, 0, 15, 15]; -// } -// break; -// } -// case (AgeBracket.a18_29): { -// if (sex === Sex.Male) { -// // (15.057*MP + 692.2) * PAL -// res = [15.057, 692.2, 1.95, 1.65, 1.85, 1.55]; -// } else if (sex === Sex.Female) { -// // (14.818*MP + 486.6) * PAL, 208 and 251 extra energy for pregnant and lactating women -// res = [14.818, 486.6, 1.95, 1.65, 1.85, 1.55, 208, 251]; -// } -// break; -// } -// case (AgeBracket.a30_59): { -// if (sex === Sex.Male) { -// // (11.472*MP + 873.1) * PAL -// res = [11.472, 873.1, 1.95, 1.65, 1.85, 1.55]; -// } else if (sex === Sex.Female) { -// // (8.126*MP + 845.6) * PAL, 208 and 251 extra energy for pregnant and lactating women -// res = [8.126, 845.6, 1.95, 1.65, 1.85, 1.55, 208, 251]; -// } -// break; -// } -// case (AgeBracket.a60): { -// if (sex === Sex.Male) { -// // (11.711*MP + 587.7) * PAL -// res = [11.711, 587.7, 1.95, 1.65, 1.85, 1.55]; -// } else if (sex === Sex.Female) { -// // (9.082*MP + 658.5) * PAL -// res = [9.082, 658.5, 1.95, 1.65, 1.85, 1.55]; -// } -// break; -// } - -// default: { -// throw new Error('Parsing error, attribute edad does not respect format'); -// } -// } -// return res; -// }; diff --git a/src/Services/ParserService.ts b/src/Services/ParserService.ts index 16ee980f3e3da9946be2186daba74d15bca66ca0..afa7841f154f530f15db93b9290d304d16ba65eb 100644 --- a/src/Services/ParserService.ts +++ b/src/Services/ParserService.ts @@ -3,29 +3,16 @@ import AgeGroupJSON from '../DTOs/AgeGroupJSON'; import AgeBracket from '../Enum/AgeBracket'; import Sex from '../Enum/Sex'; -const checkAgeGroup = (group: AgeGroupJSON): boolean => ( - typeof (group.age) !== 'string' - || typeof (group.sex) !== 'string' - || typeof (group.medianWeight) !== 'number' - || typeof (group.population) !== 'number' - || group.medianWeight <= 0 - || group.population <= 0 -); - const parseGroups = (groups: AgeGroupJSON[]): AgeGroup[] => { const retGroups: AgeGroup[] = []; groups.forEach((ageGroup: AgeGroupJSON) => { - if (checkAgeGroup(ageGroup)) { - throw new Error('Age group data does not meet specification'); - } else { - const group: AgeGroup = { - age: ageGroup.age as AgeBracket, - sex: ageGroup.sex as Sex, - medianWeight: ageGroup.medianWeight, - population: ageGroup.population, - }; - retGroups.push(group); - } + const group: AgeGroup = { + age: ageGroup.age as AgeBracket, + sex: ageGroup.sex as Sex, + medianWeight: ageGroup.medianWeight, + population: ageGroup.population, + }; + retGroups.push(group); }); return retGroups; }; @@ -41,159 +28,3 @@ const unparseGroup = (group: AgeGroup): AgeGroupJSON => { }; export default { parseGroups, unparseGroup }; - -// const parseSex = (sexo: string): Sex => { -// let sex: Sex = sexo; -// switch (sexo) { -// case 'Masculino': { -// sex = Sex.Masculino; -// break; -// } -// case 'Femenino': { -// sex = Sex.Femenino; -// break; -// } -// default: { -// throw new Error('Parsing error, attribute sexo does not respect format'); -// } -// } -// return sex; -// }; -// -// const parseAge = (edad: string): AgeBracket => { -// let age: AgeBracket; -// switch (edad) { -// case '0 meses': { -// age = AgeBracket.m0; -// break; -// } -// case '1 mes': { -// age = AgeBracket.m1; -// break; -// } -// case '2 meses': { -// age = AgeBracket.m2; -// break; -// } -// case '3 meses': { -// age = AgeBracket.m3; -// break; -// } -// case '4 meses': { -// age = AgeBracket.m4; -// break; -// } -// case '5 meses': { -// age = AgeBracket.m5; -// break; -// } -// case '6 meses': { -// age = AgeBracket.m6; -// break; -// } -// case '7 meses': { -// age = AgeBracket.m7; -// break; -// } -// case '8 meses': { -// age = AgeBracket.m8; -// break; -// } -// case '9 meses': { -// age = AgeBracket.m9; -// break; -// } -// case '10 meses': { -// age = AgeBracket.m10; -// break; -// } -// case '11 meses': { -// age = AgeBracket.m11; -// break; -// } -// case '1 año': { -// age = AgeBracket.a1; -// break; -// } -// case '2 años': { -// age = AgeBracket.a2; -// break; -// } -// case '3 años': { -// age = AgeBracket.a3; -// break; -// } -// case '4 años': { -// age = AgeBracket.a4; -// break; -// } -// case '5 años': { -// age = AgeBracket.a5; -// break; -// } -// case '6 años': { -// age = AgeBracket.a6; -// break; -// } -// case '7 años': { -// age = AgeBracket.a7; -// break; -// } -// case '8 años': { -// age = AgeBracket.a8; -// break; -// } -// case '9 años': { -// age = AgeBracket.a9; -// break; -// } -// case '10 años': { -// age = AgeBracket.a10; -// break; -// } -// case '11 años': { -// age = AgeBracket.a11; -// break; -// } -// case '12 años': { -// age = AgeBracket.a12; -// break; -// } -// case '13 años': { -// age = AgeBracket.a13; -// break; -// } -// case '14 años': { -// age = AgeBracket.a14; -// break; -// } -// case '15 años': { -// age = AgeBracket.a15; -// break; -// } -// case '16 años': { -// age = AgeBracket.a16; -// break; -// } -// case '17 años': { -// age = AgeBracket.a17; -// break; -// } -// case '18-29 años': { -// age = AgeBracket.a18_29; -// break; -// } -// case '30-59 años': { -// age = AgeBracket.a30_59; -// break; -// } -// case '60+ años': { -// age = AgeBracket.a60; -// break; -// } -// default: { -// throw new Error('Parsing error, attribute edad does not respect format'); -// } -// } -// return age; -// }; diff --git a/swagger.yaml b/swagger.yaml index 228a7e12bcb69a3636ab85d3ec34ffcc3bf0629f..ebfacb136c61c2c2e41c54be04be58b14549b510 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -255,11 +255,13 @@ components: - extraData Parameter: properties: - parameter: - oneOf: - - $ref: '#/components/schemas/WeightParameter' - - $ref: '#/components/schemas/ExtraDataParameter' - - $ref: '#/components/schemas/EquationConstantParameter' + parameters: + type: array + items: + oneOf: + - $ref: '#/components/schemas/WeightParameter' + - $ref: '#/components/schemas/ExtraDataParameter' + - $ref: '#/components/schemas/EquationConstantParameter' WeightParameter: properties: parameterType: