diff --git a/src/Controllers/ParameterController.ts b/src/Controllers/ParameterController.ts index b409a429f58af9a375ddd528dad7975ba98c4227..bf37397b196d8bd1ea56e971e357b85a690416bb 100644 --- a/src/Controllers/ParameterController.ts +++ b/src/Controllers/ParameterController.ts @@ -1,83 +1,83 @@ -import { - Handler, Request, Response, Router, -} from 'express'; -import { Validator } from 'express-json-validator-middleware'; -import ParameterType from '../Enum/ParameterType'; -import logger from '../Logger/logger'; -import updateParameterValueBody from '../Schemas/updateParameterValueBody'; -import ParameterService from '../Services/ParameterService'; - -const router = Router(); - -const { validate } = new Validator({}); - -const getParameters: Handler = async (req: Request, res: Response) => { - try { - const parameters = await ParameterService.getParameters(); - return res.status(200).send(parameters); - } catch (error) { - const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); - } -}; - -const getDefaultWeights: Handler = async (req: Request, res: Response) => { - try { - const weights = await ParameterService.getDefaultWeights(); - return res.status(200).send(weights); - } catch (error) { - const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); - } -}; - -const getDefaultExtraData: Handler = async (req: Request, res: Response) => { - try { - const weights = await ParameterService.getDefaultExtraData(); - return res.status(200).send(weights); - } catch (error) { - const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); - } -}; - -const updateParameterValue: Handler = async (req: Request, res: Response) => { - const { parameter } = req.body; - try { - switch (parameter.parameterType) { - case ParameterType.DefaultWeight: - await ParameterService.updateDefaultWeight( - parameter.ageRange, parameter.sex, parameter.value, - ); - break; - case ParameterType.MinorPAL: - case ParameterType.AdultPAL: - case ParameterType.Maternity: - await ParameterService.updateExtraData(parameter.id, parameter.value); - break; - case ParameterType.TEE: - case ParameterType.BMR: - await ParameterService.updateEquationConstant( - parameter.ageRange, parameter.sex, parameter.order, parameter.value, - ); - break; - default: - break; - } - return res.status(200).send(); - } catch (error) { - const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); - } -}; - -router.post('/', getParameters); -router.post('/weights/', getDefaultWeights); -router.post('/extraData/', getDefaultExtraData); -router.put('/parameterUpdate/', validate({ body: updateParameterValueBody }), updateParameterValue); - -export default router; +import { + Handler, Request, Response, Router, +} from 'express'; +import { Validator } from 'express-json-validator-middleware'; +import ParameterType from '../Enum/ParameterType'; +import logger from '../Logger/logger'; +import updateParameterValueBody from '../Schemas/updateParameterValueBody'; +import ParameterService from '../Services/ParameterService'; + +const router = Router(); + +const { validate } = new Validator({}); + +const getParameters: Handler = async (req: Request, res: Response) => { + try { + const parameters = await ParameterService.getParameters(); + return res.status(200).send(parameters); + } catch (error) { + const e = error as Error; + logger.info(e.message); + return res.status(400).json({ error: e.message }); + } +}; + +const getDefaultWeights: Handler = async (req: Request, res: Response) => { + try { + const weights = await ParameterService.getDefaultWeights(); + return res.status(200).send(weights); + } catch (error) { + const e = error as Error; + logger.info(e.message); + return res.status(400).json({ error: e.message }); + } +}; + +const getDefaultExtraData: Handler = async (req: Request, res: Response) => { + try { + const weights = await ParameterService.getDefaultExtraData(); + return res.status(200).send(weights); + } catch (error) { + const e = error as Error; + logger.info(e.message); + return res.status(400).json({ error: e.message }); + } +}; + +const updateParameterValue: Handler = async (req: Request, res: Response) => { + const { parameter } = req.body; + try { + switch (parameter.parameterType) { + case ParameterType.DefaultWeight: + await ParameterService.updateDefaultWeight( + parameter.ageRange, parameter.sex, parameter.value, + ); + break; + case ParameterType.MinorPAL: + case ParameterType.AdultPAL: + case ParameterType.Maternity: + await ParameterService.updateExtraData(parameter.id, parameter.value); + break; + case ParameterType.TEE: + case ParameterType.BMR: + await ParameterService.updateEquationConstant( + parameter.ageRange, parameter.sex, parameter.order, parameter.value, + ); + break; + default: + break; + } + return res.status(200).send(); + } catch (error) { + const e = error as Error; + logger.info(e.message); + return res.status(400).json({ error: e.message }); + } +}; + +router.get('/', getParameters); +router.post('/weights/', getDefaultWeights); +router.post('/extraData/', getDefaultExtraData); +router.put('/parameterUpdate/', validate({ body: updateParameterValueBody }), updateParameterValue); + +export default router; diff --git a/src/Services/ParameterService.ts b/src/Services/ParameterService.ts index ae6d89532c47932effc0fdb81a1401ea9dcb9218..f41577cfce9e015676cc7d03369335a94e36dd1e 100644 --- a/src/Services/ParameterService.ts +++ b/src/Services/ParameterService.ts @@ -1,593 +1,593 @@ -import { Op } from 'sequelize'; -import DefaultExtraDataDTO from '../DTOs/DefaultExtraDataDTO'; -import EquationConstantDTO from '../DTOs/EquationConstantDTO'; -import AgeBracket from '../Enum/AgeBracket'; -import Sex from '../Enum/Sex'; -import ParameterMapper from '../Mappers/ParameterMapper'; -import DefaultExtraData from '../Models/DefaultExtraData'; -import EquationConstant from '../Models/EquationConstant'; -import DefaultWeight from '../Models/DefaultWeight'; -import DefaultWeightDTO from '../DTOs/DefaultWeightDTO'; -import ParameterWrapperDTO from '../DTOs/ParameterWrapperDTO'; - -const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<number[]> => { - const res: number[] = []; - await EquationConstant.findAll({ - where: { - ageRange: ageBracket as string, - sex: sex as string, - }, - order: [['order', 'ASC']], - }) - .then((rows: EquationConstant[]) => { - rows.forEach((row: EquationConstant) => { - const constant: EquationConstantDTO = ParameterMapper.equationConstantToDTO(row); - res.push(constant.value); - }); - }); - switch (ageBracket) { - case AgeBracket.a6: - case AgeBracket.a7: - case AgeBracket.a8: - case AgeBracket.a9: - case AgeBracket.a10: - case AgeBracket.a11: - case AgeBracket.a12: - case AgeBracket.a13: - case AgeBracket.a14: - case AgeBracket.a15: - case AgeBracket.a16: - case AgeBracket.a17: { - await DefaultExtraData.findAll({ - where: { - parameterType: 'NAF Menores', - order: [1, 2], - }, - order: [['order', 'ASC']], - }) - .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); - }); - break; - } - case AgeBracket.a18_29: { - if (sex === Sex.Female) { - await DefaultExtraData.findAll({ - where: { - [Op.or]: [ - { parameterType: 'NAF Adultos' }, - { - id: ['pregnancyExtraEnergy18to29', 'lactationExtraEnergy18to29'], - }, - ], - order: { - [Op.gt]: 0, - }, - }, - order: [['order', 'ASC']], - }) - .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); - }); - console.log(res); - } else { - await DefaultExtraData.findAll({ - where: { - parameterType: 'NAF Adultos', - order: { - [Op.gt]: 0, - }, - }, - order: [['order', 'ASC']], - }) - .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); - }); - } - break; - } - case AgeBracket.a30_59: { - if (sex === Sex.Female) { - await DefaultExtraData.findAll({ - where: { - [Op.or]: [ - { parameterType: 'NAF Adultos' }, - { - id: ['pregnancyExtraEnergy30to59', 'lactationExtraEnergy30to59'], - }, - ], - order: { - [Op.gt]: 0, - }, - }, - order: [['order', 'ASC']], - }) - .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); - }); - console.log(res); - } else { - await DefaultExtraData.findAll({ - where: { - parameterType: 'NAF Adultos', - order: { - [Op.gt]: 0, - }, - }, - order: [['order', 'ASC']], - }) - .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); - }); - } - break; - } - case AgeBracket.a60: { - await DefaultExtraData.findAll({ - where: { - parameterType: 'NAF Adultos', - order: { - [Op.gt]: 0, - }, - }, - order: [['order', 'ASC']], - }) - .then((rows: DefaultExtraData[]) => { - rows.forEach((row: DefaultExtraData) => { - const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); - res.push(constant.value); - }); - }); - break; - } - default: { - break; - } - } - return res; -}; - -const getDefaultWeights = async (): Promise<DefaultWeightDTO[]> => { - const res: DefaultWeightDTO[] = []; - await DefaultWeight.findAll().then((parameters: DefaultWeight[]) => { - parameters.forEach((param: DefaultWeight) => { - res.push(ParameterMapper.defaultWeightToDTO(param)); - }); - }); - return res; -}; - -const getDefaultExtraData = async (): Promise<DefaultExtraDataDTO[]> => { - const res: DefaultExtraDataDTO[] = []; - await DefaultExtraData.findAll({ - where: { - order: 0, - }, - }).then((parameters: DefaultExtraData[]) => { - parameters.forEach((param: DefaultExtraData) => { - res.push(ParameterMapper.defaultExtraDataToDTO(param)); - }); - }); - return res; -}; - -const getParameters = async (): Promise<ParameterWrapperDTO> => { - const extraData: DefaultExtraDataDTO[] = []; - await DefaultExtraData.findAll().then((parameters: DefaultExtraData[]) => { - parameters.forEach((param: DefaultExtraData) => { - extraData.push(ParameterMapper.defaultExtraDataToDTO(param)); - }); - }); - const equationConstant: EquationConstantDTO[] = []; - await EquationConstant.findAll().then((parameters: EquationConstant[]) => { - parameters.forEach((param: EquationConstant) => { - equationConstant.push(ParameterMapper.equationConstantToDTO(param)); - }); - }); - const defaultWeight: DefaultWeightDTO[] = await getDefaultWeights(); - const res: ParameterWrapperDTO = { - equationConstants: equationConstant, - defaultWeights: defaultWeight, - defaultExtraData: extraData, - }; - return res; -}; - -const updateEquationConstant = async (age: AgeBracket, s: Sex, ord: number, val: number): -Promise<void> => { - EquationConstant.update( - { value: val }, - { - where: { - ageRange: age, - sex: s, - order: ord, - }, - }, - ).catch((err) => { - throw err; - }); -}; - -const updateDefaultWeight = async (age: AgeBracket, s: Sex, val: number): Promise<void> => { - DefaultWeight.update( - { value: val }, - { - where: { - ageRange: age, - sex: s, - }, - }, - ).catch((err) => { - throw err; - }); -}; - -const updateExtraData = async (identifier: string, val: number): Promise<void> => { - DefaultExtraData.update( - { value: val }, - { - where: { - id: identifier, - }, - }, - ).catch((err) => { - throw err; - }); -}; - -export default { - getEquationValues, - getDefaultWeights, - getDefaultExtraData, - getParameters, - updateEquationConstant, - 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; -// }; +import { Op } from 'sequelize'; +import DefaultExtraDataDTO from '../DTOs/DefaultExtraDataDTO'; +import EquationConstantDTO from '../DTOs/EquationConstantDTO'; +import AgeBracket from '../Enum/AgeBracket'; +import Sex from '../Enum/Sex'; +import ParameterMapper from '../Mappers/ParameterMapper'; +import DefaultExtraData from '../Models/DefaultExtraData'; +import EquationConstant from '../Models/EquationConstant'; +import DefaultWeight from '../Models/DefaultWeight'; +import DefaultWeightDTO from '../DTOs/DefaultWeightDTO'; +import ParameterWrapperDTO from '../DTOs/ParameterWrapperDTO'; + +const getEquationValues = async (ageBracket: AgeBracket, sex: Sex): Promise<number[]> => { + const res: number[] = []; + await EquationConstant.findAll({ + where: { + ageRange: ageBracket as string, + sex: sex as string, + }, + order: [['order', 'ASC']], + }) + .then((rows: EquationConstant[]) => { + rows.forEach((row: EquationConstant) => { + const constant: EquationConstantDTO = ParameterMapper.equationConstantToDTO(row); + res.push(constant.value); + }); + }); + switch (ageBracket) { + case AgeBracket.a6: + case AgeBracket.a7: + case AgeBracket.a8: + case AgeBracket.a9: + case AgeBracket.a10: + case AgeBracket.a11: + case AgeBracket.a12: + case AgeBracket.a13: + case AgeBracket.a14: + case AgeBracket.a15: + case AgeBracket.a16: + case AgeBracket.a17: { + await DefaultExtraData.findAll({ + where: { + parameterType: 'NAF Menores', + order: [1, 2], + }, + order: [['order', 'ASC']], + }) + .then((rows: DefaultExtraData[]) => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + res.push(constant.value); + }); + }); + break; + } + case AgeBracket.a18_29: { + if (sex === Sex.Female) { + await DefaultExtraData.findAll({ + where: { + [Op.or]: [ + { parameterType: 'NAF Adultos' }, + { + id: ['pregnancyExtraEnergy18to29', 'lactationExtraEnergy18to29'], + }, + ], + order: { + [Op.gt]: 0, + }, + }, + order: [['order', 'ASC']], + }) + .then((rows: DefaultExtraData[]) => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + res.push(constant.value); + }); + }); + console.log(res); + } else { + await DefaultExtraData.findAll({ + where: { + parameterType: 'NAF Adultos', + order: { + [Op.gt]: 0, + }, + }, + order: [['order', 'ASC']], + }) + .then((rows: DefaultExtraData[]) => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + res.push(constant.value); + }); + }); + } + break; + } + case AgeBracket.a30_59: { + if (sex === Sex.Female) { + await DefaultExtraData.findAll({ + where: { + [Op.or]: [ + { parameterType: 'NAF Adultos' }, + { + id: ['pregnancyExtraEnergy30to59', 'lactationExtraEnergy30to59'], + }, + ], + order: { + [Op.gt]: 0, + }, + }, + order: [['order', 'ASC']], + }) + .then((rows: DefaultExtraData[]) => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + res.push(constant.value); + }); + }); + console.log(res); + } else { + await DefaultExtraData.findAll({ + where: { + parameterType: 'NAF Adultos', + order: { + [Op.gt]: 0, + }, + }, + order: [['order', 'ASC']], + }) + .then((rows: DefaultExtraData[]) => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + res.push(constant.value); + }); + }); + } + break; + } + case AgeBracket.a60: { + await DefaultExtraData.findAll({ + where: { + parameterType: 'NAF Adultos', + order: { + [Op.gt]: 0, + }, + }, + order: [['order', 'ASC']], + }) + .then((rows: DefaultExtraData[]) => { + rows.forEach((row: DefaultExtraData) => { + const constant: DefaultExtraDataDTO = ParameterMapper.defaultExtraDataToDTO(row); + res.push(constant.value); + }); + }); + break; + } + default: { + break; + } + } + return res; +}; + +const getDefaultWeights = async (): Promise<DefaultWeightDTO[]> => { + const res: DefaultWeightDTO[] = []; + await DefaultWeight.findAll().then((parameters: DefaultWeight[]) => { + parameters.forEach((param: DefaultWeight) => { + res.push(ParameterMapper.defaultWeightToDTO(param)); + }); + }); + return res; +}; + +const getDefaultExtraData = async (): Promise<DefaultExtraDataDTO[]> => { + const res: DefaultExtraDataDTO[] = []; + await DefaultExtraData.findAll({ + where: { + order: 0, + }, + }).then((parameters: DefaultExtraData[]) => { + parameters.forEach((param: DefaultExtraData) => { + res.push(ParameterMapper.defaultExtraDataToDTO(param)); + }); + }); + return res; +}; + +const getParameters = async (): Promise<ParameterWrapperDTO> => { + const extraData: DefaultExtraDataDTO[] = []; + await DefaultExtraData.findAll().then((parameters: DefaultExtraData[]) => { + parameters.forEach((param: DefaultExtraData) => { + extraData.push(ParameterMapper.defaultExtraDataToDTO(param)); + }); + }); + const equationConstant: EquationConstantDTO[] = []; + await EquationConstant.findAll().then((parameters: EquationConstant[]) => { + parameters.forEach((param: EquationConstant) => { + equationConstant.push(ParameterMapper.equationConstantToDTO(param)); + }); + }); + const defaultWeight: DefaultWeightDTO[] = await getDefaultWeights(); + const res: ParameterWrapperDTO = { + equationConstants: equationConstant, + defaultWeights: defaultWeight, + defaultExtraData: extraData, + }; + return res; +}; + +const updateEquationConstant = async (age: AgeBracket, s: Sex, ord: number, val: number): +Promise<void> => { + await EquationConstant.update( + { value: val }, + { + where: { + ageRange: age, + sex: s, + order: ord, + }, + }, + ).catch((err) => { + throw err; + }); +}; + +const updateDefaultWeight = async (age: AgeBracket, s: Sex, val: number): Promise<void> => { + await DefaultWeight.update( + { value: val }, + { + where: { + ageRange: age, + sex: s, + }, + }, + ).catch((err) => { + throw err; + }); +}; + +const updateExtraData = async (identifier: string, val: number): Promise<void> => { + await DefaultExtraData.update( + { value: val }, + { + where: { + id: identifier, + }, + }, + ).catch((err) => { + throw err; + }); +}; + +export default { + getEquationValues, + getDefaultWeights, + getDefaultExtraData, + getParameters, + updateEquationConstant, + 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; +// };