diff --git a/src/Controllers/AuditorController.ts b/src/Controllers/AuditorController.ts index dc513293196d71d2d0b60cf9baade3d4a20b88c5..a060e8ade79b8308be9c611e34d74f834f6762a8 100644 --- a/src/Controllers/AuditorController.ts +++ b/src/Controllers/AuditorController.ts @@ -1,9 +1,8 @@ import { Request, Response, Router, } from 'express'; -import AuditDTO from '../DTOs/AuditDTO'; -import logger from '../Logger/logger'; import Auditor from '../Services/Auditor'; +import { logAndRespond } from './Utils'; const router = Router(); @@ -11,11 +10,10 @@ const auditGet = async (req: Request, res: Response) => { try { const token = req.headers.authorization; const audits = await Auditor.getAudit(Number(req.query.cant), Number(req.query.page), token); - return res.status(200).send(audits); + return logAndRespond(res, 200, 'send', audits, 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; diff --git a/src/Controllers/CalculatorController.ts b/src/Controllers/CalculatorController.ts index 4ffff20c8989fc86c4dd1b5e3008d894bc771b4e..e5c3b6c6dd4fecc8a1ba27cb39866b59e0749019 100644 --- a/src/Controllers/CalculatorController.ts +++ b/src/Controllers/CalculatorController.ts @@ -7,6 +7,7 @@ import CalculatorResponse from '../DTOs/CalculatorResponseDTO'; import logger from '../Logger/logger'; import getRepBody from '../Schemas/getRepBody'; import { audit } from '../Services/Auditor'; +import { logAndRespond } from './Utils'; const router = Router(); @@ -18,11 +19,10 @@ const getREP: Handler = async (req: Request, res: Response) => { const EnergyReq: CalculatorResponse = await CalculatorService .calculateEnergeticRequirement(groups, extraData); audit(req, 'Calculó el REP'); - return res.status(200).send(EnergyReq); + return logAndRespond(res, 200, 'send', EnergyReq, 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; diff --git a/src/Controllers/FAQController.ts b/src/Controllers/FAQController.ts index 4ed26253f4da0d96a5a3029b34e78d272a6d9d19..53369d0af0290e5fefccc8ab11f150917d7e8564 100644 --- a/src/Controllers/FAQController.ts +++ b/src/Controllers/FAQController.ts @@ -2,16 +2,16 @@ import { Request, Response, Router } from 'express'; import FAQ from '../Models/FAQ'; import FAQService from '../Services/FAQService'; import { FAQDTO } from '../DTOs/FAQDTO'; +import { logAndRespond } from './Utils'; const router = Router(); const list = async (req: Request, res: Response): Promise<Response> => { try { const faqs: FAQ[] = await FAQService.list(); - return res.status(200).send(faqs); + return logAndRespond(res, 200, 'send', faqs, 'info', null, null); } catch (error) { - console.log('error'); - return res.status(400).send('list error'); + return logAndRespond(res, 400, 'send', 'list error', 'info', null, null); } }; @@ -19,10 +19,9 @@ const create = async (req: Request, res: Response): Promise<Response> => { try { const dto: FAQDTO = req.body; const newFAQ: FAQ = await FAQService.create(dto); - return res.status(200).send(newFAQ); + return logAndRespond(res, 200, 'send', newFAQ, 'info', null, null); } catch (error) { - console.log(error); - return res.status(400).send('create error'); + return logAndRespond(res, 400, 'send', 'create error', 'info', null, null); } }; @@ -32,12 +31,11 @@ const update = async (req: Request, res: Response): Promise<Response> => { const faqId = Number(req.params.id); const updatedFAQ: FAQ | null = await FAQService.update(faqId, dto); if (updatedFAQ) { - return res.status(200).send(updatedFAQ); + return logAndRespond(res, 200, 'send', updatedFAQ, 'info', null, null); } - return res.status(400).send('id error'); + return logAndRespond(res, 404, 'send', 'id not found', 'info', null, null); } catch (error) { - console.log(error); - return res.status(400).send('update error'); + return logAndRespond(res, 400, 'send', 'update error', 'info', null, null); } }; @@ -46,11 +44,11 @@ const deleteFAQ = async (req: Request, res: Response): Promise<Response> => { const faqId = Number(req.params.id); const success: boolean = await FAQService.deleteFAQ(faqId); if (success) { - return res.status(200).send(success); + logAndRespond(res, 200, 'send', success, 'info', null, null); } - return res.status(400).send(success); + return logAndRespond(res, 404, 'send', 'id not found', 'info', null, null); } catch (error) { - return res.status(400).send('delete error'); + return logAndRespond(res, 400, 'send', 'delete error', 'info', null, null); } }; diff --git a/src/Controllers/ParameterController.ts b/src/Controllers/ParameterController.ts index c15ca265dbd493d41d627263f10a00282ee3422d..ed8ccdfb28e868f34f9e409bbd8297bf3e8f31d1 100644 --- a/src/Controllers/ParameterController.ts +++ b/src/Controllers/ParameterController.ts @@ -7,6 +7,7 @@ import logger from '../Logger/logger'; import updateParameterValueBody from '../Schemas/updateParameterValueBody'; import { audit } from '../Services/Auditor'; import ParameterService from '../Services/ParameterService'; +import { logAndRespond } from './Utils'; const router = Router(); @@ -15,33 +16,30 @@ const { validate } = new Validator({}); const getParameters: Handler = async (req: Request, res: Response) => { try { const parameters = await ParameterService.getParameters(); - return res.status(200).send(parameters); + logAndRespond(res, 200, 'send', parameters, 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; const getDefaultWeights: Handler = async (req: Request, res: Response) => { try { const weights = await ParameterService.getDefaultWeights(); - return res.status(200).send(weights); + logAndRespond(res, 200, 'send', weights, 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; const getDefaultExtraData: Handler = async (req: Request, res: Response) => { try { const extraData = await ParameterService.getDefaultExtraData(); - return res.status(200).send(extraData); + logAndRespond(res, 200, 'send', extraData, 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -70,11 +68,10 @@ const updateParameterValue: Handler = async (req: Request, res: Response) => { break; } audit(req, `Cambió el parametro ${parameters[0].parameterType} a ${parameters[0].value} para ${parameters[0].sex} ${parameters[0].ageRang} `); - return res.status(200).send(); + logAndRespond(res, 200, 'send', 'Parameter changed', 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; diff --git a/src/Controllers/SheetController.ts b/src/Controllers/SheetController.ts index b5ae02a84fa88a2f84906f45efee8af1f68694a5..f9c99ed99f770f128c35565c73da06748819789a 100644 --- a/src/Controllers/SheetController.ts +++ b/src/Controllers/SheetController.ts @@ -5,6 +5,7 @@ import SheetService from '../Services/SheetService'; import logger from '../Logger/logger'; import AgeGroupJSON from '../DTOs/AgeGroupJSON'; import { audit } from '../Services/Auditor'; +import { logAndRespond } from './Utils'; const router = Router(); @@ -13,11 +14,10 @@ const parseSheet: Handler = async (req: Request, res: Response) => { try { const parsedSheet: AgeGroupJSON[] = SheetService.parseSheetService(sheet); audit(req, 'Usó una planilla para ingresar datos'); - return res.status(200).send(parsedSheet); + logAndRespond(res, 200, 'send', parsedSheet, 'info', null, null); } catch (error) { const e = error as Error; - logger.info(e.message); - return res.status(400).json({ error: e.message }); + logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; diff --git a/src/Controllers/UserController.ts b/src/Controllers/UserController.ts index 085fd95b7b5f0ba88e73da922673b3e25bf858b1..b55ce11bd7427b2114fb099f4c7e30e7af9b38f6 100644 --- a/src/Controllers/UserController.ts +++ b/src/Controllers/UserController.ts @@ -5,16 +5,17 @@ import { Handler, Request, Response, Router, } from 'express'; import UserAPI from '../Services/UserAPI'; +import { logAndRespond } from './Utils'; const router = Router(); const create: Handler = async (req: Request, res: Response) => { try { const user: any = await UserAPI.create(req.body); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -23,20 +24,20 @@ const listUsers: Handler = async (req: Request, res: Response) => { const token: any = req.headers.authorization; const userList: any = await UserAPI.listUsers(req.query.type, req.query.limit, req.query.offset, req.query.search, token); - return res.status(200).send(userList); + return logAndRespond(res, 200, 'send', userList, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; const login: Handler = async (req: Request, res: Response) => { try { const { token, user }: any = await UserAPI.login(req.body); - return res.status(200).send({ token, user }); + return logAndRespond(res, 200, 'send', { token, user }, 'info', null, ['token']); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -44,10 +45,10 @@ const update: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.update(req.body, req.params.id, token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, ['token']); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -55,10 +56,10 @@ const password: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.password(req.body, req.params.id, token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -66,10 +67,10 @@ const approve: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.approve(req.params.id, token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -77,10 +78,10 @@ const cancel: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.cancel(req.params.id, token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -88,10 +89,10 @@ const giveAdminPermission: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.giveAdminPermission(req.params.id, token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -99,10 +100,10 @@ const removeAdminPermission: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.removeAdminPermission(req.params.id, token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -110,10 +111,10 @@ const checkUser: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.checkUser(token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; @@ -121,10 +122,10 @@ const getUser: Handler = async (req: Request, res: Response) => { try { const token: any = req.headers.authorization; const user: any = await UserAPI.getUser(Number(req.params.id), token); - return res.status(200).send(user); + return logAndRespond(res, 200, 'send', user, 'info', null, null); } catch (error) { const e = error as Error; - return res.status(400).json({ error: e.message }); + return logAndRespond(res, 400, 'json', { error: e.message }, 'info', null, null); } }; diff --git a/src/Controllers/Utils.ts b/src/Controllers/Utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..f4cd281b825423bfc4c1f891d21bc6c583f7afaa --- /dev/null +++ b/src/Controllers/Utils.ts @@ -0,0 +1,33 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { Response } from 'express'; +import logger from '../Logger/logger'; + +// eslint-disable-next-line max-len +export const logAndRespond = (response: any, statusCode: number, method: string, responseBody: any, logLevel: string, error: any, keysToHide: string[]|null): Promise<Response> => { + const responseBodyToLog = { + ...responseBody, + }; + if (keysToHide !== null) { + for (let i = 0; i < keysToHide.length; i += 1) { + if (typeof responseBodyToLog[keysToHide[i]] !== 'undefined') { + responseBodyToLog[keysToHide[i]] = '__HIDDEN__'; + } + } + } + if (logLevel === 'info') { + logger.info(`Request responded [HTTP ${statusCode}]`, { response: responseBodyToLog }); + } else if (logLevel === 'warn') { + logger.warn(`Request responded [HTTP ${statusCode}]`, { response: responseBodyToLog }); + } else if (logLevel === 'error') { + logger.error(error, { response: responseBodyToLog }); + } + let res; + if (method === 'json') { + res = response.status(statusCode).json(responseBody); + } else if (method === 'send') { + res = response.status(statusCode).send(responseBody); + } else { + throw new Error('Unknown method'); + } + return res; +};