From fe24b72189e04ad721f26d44511f6c719c15b78a Mon Sep 17 00:00:00 2001 From: Agustin <agusr1999@gmail.com> Date: Sat, 16 Oct 2021 20:02:15 -0300 Subject: [PATCH] Parameter update checks percentage consistency, parameter ids now consts Also updates some error messages and environment variables --- .env | 6 +- src/Config/Constants.ts | 26 ++++ src/Config/DBConfig.ts | 7 -- src/Controllers/CalculatorController.ts | 5 +- src/Controllers/ParameterController.ts | 14 +-- src/Controllers/SheetController.ts | 1 - src/DAOs/README.txt | 1 - src/Interfaces/README.txt | 1 - src/Loaders/ParameterDataBase.ts | 15 ++- src/Loaders/ParameterDataBaseLoader.ts | 1 + src/Services/ERCalculator.ts | 14 +-- src/Services/ParameterService.ts | 95 +++++++++++---- src/Services/ParserService.ts | 156 ------------------------ 13 files changed, 129 insertions(+), 213 deletions(-) delete mode 100644 src/Config/DBConfig.ts delete mode 100644 src/DAOs/README.txt delete mode 100644 src/Interfaces/README.txt diff --git a/.env b/.env index 0efeaa7..2f26ed0 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/src/Config/Constants.ts b/src/Config/Constants.ts index 337ad28..0334439 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 = { + 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', +} \ No newline at end of file diff --git a/src/Config/DBConfig.ts b/src/Config/DBConfig.ts deleted file mode 100644 index ddd9d64..0000000 --- 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 91db838..8cbdaa2 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 2fc04f0..852879e 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, parameterType } = req.body; try { - switch (parameter.parameterType) { + switch (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 727fc27..9b4d631 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 592fbaa..0000000 --- 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/Interfaces/README.txt b/src/Interfaces/README.txt deleted file mode 100644 index 0ea96f6..0000000 --- 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 d6d458f..7add751 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 f086c21..560d0fb 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/Services/ERCalculator.ts b/src/Services/ERCalculator.ts index 3b98680..18a67df 100644 --- a/src/Services/ERCalculator.ts +++ b/src/Services/ERCalculator.ts @@ -140,7 +140,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 +161,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 +173,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 +195,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 +207,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 +229,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); @@ -308,7 +308,7 @@ const calculateER = (groupParameters: Map<number[], AgeGroup>, data: ExtraData): 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; diff --git a/src/Services/ParameterService.ts b/src/Services/ParameterService.ts index 194cd53..fe73c58 100644 --- a/src/Services/ParameterService.ts +++ b/src/Services/ParameterService.ts @@ -9,6 +9,7 @@ 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 getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<number[]> => { const res: number[] = []; @@ -75,7 +76,6 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb res.push(constant.value); }); }); - console.log(res); } else { await DefaultExtraData.findAll({ where: { @@ -117,7 +117,6 @@ const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<numb res.push(constant.value); }); }); - console.log(res); } else { await DefaultExtraData.findAll({ where: { @@ -208,15 +207,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 +222,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 +236,70 @@ const updateDefaultWeight = async (age: AgeBracket, s: Sex, val: number): Promis }); }; -const updateExtraData = async (identifier: string, val: number): Promise<void> => { - await DefaultExtraData.update( - { value: val }, - { - where: { - id: identifier, - }, - }, - ).catch((err) => { - throw err; +const updatePercentage = async (params: DefaultExtraDataDTO[], total: number): Promise<void> => { + if (total === 100) { + params.forEach(async (param: DefaultExtraDataDTO) => { + await DefaultExtraData.update( + { value: param.value }, + { + where: { + id: param.id, + }, + }, + ).catch((err) => { + throw err; + }); + }); + } else { + throw new Error('These percentages must add up to 100'); + } +}; + +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)) { + updatePercentage(parameters, total); + } else { + throw new Error('Missing parameter for update'); + } + } else if (ids.includes(extraDataIDs.urbPopPerc)) { + if (ids.includes(extraDataIDs.rurPopPerc)) { + updatePercentage(parameters, total); + } else { + throw new Error('Missing parameter for update'); + } + } else if (ids.includes(extraDataIDs.urbAdultActPerc)) { + if (ids.includes(extraDataIDs.urbAdultLowPerc)) { + updatePercentage(parameters, total); + } else { + throw new Error('Missing parameter for update'); + } + } else if (ids.includes(extraDataIDs.rurAdultActPerc)) { + if (ids.includes(extraDataIDs.rurAdultLowPerc)) { + updatePercentage(parameters, total); + } else { + throw new Error('Missing parameter for update'); + } + } else { + await DefaultExtraData.update( + { value: parameters[0].value }, + { + where: { + id: parameters[0].id, + }, + }, + ).catch((err) => { + throw err; + }); + } }; export default { diff --git a/src/Services/ParserService.ts b/src/Services/ParserService.ts index 16ee980..0b23840 100644 --- a/src/Services/ParserService.ts +++ b/src/Services/ParserService.ts @@ -41,159 +41,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; -// }; -- GitLab