From ba55296e5d110d5dc455ec8599d243cc5f54bc66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Tue, 30 May 2023 18:20:33 +0200 Subject: [PATCH] Add manager of params (f.e. help get value from an id) --- .../src/middlewares/ParamsCallbackManager.ts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 ExpressAPI/src/middlewares/ParamsCallbackManager.ts diff --git a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts new file mode 100644 index 0000000..0c5f6b1 --- /dev/null +++ b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts @@ -0,0 +1,46 @@ +import { Express } from 'express-serve-static-core'; +import ApiRequest from '../models/ApiRequest'; +import express from 'express'; +import { StatusCodes } from 'http-status-codes'; + + +class ParamsCallbackManager { + private static _instance: ParamsCallbackManager; + + private constructor() { } + + public static get instance(): ParamsCallbackManager { + if ( !ParamsCallbackManager._instance ) { + ParamsCallbackManager._instance = new ParamsCallbackManager(); + } + + return ParamsCallbackManager._instance; + } + + protected listenParam(paramName: string, backend: Express, context: any, functionName: string, indexName: string) { + backend.param(paramName, (req: ApiRequest, res: express.Response, next: express.NextFunction, id: number | string) => { + (context[functionName] as (id: number | Array<number>) => Promise<any>)(typeof id === 'string' ? JSON.parse(id) as Array<number> : id).then(result => { + if ( result ) { + this.initBoundParams(req); + (req.boundParams as any)[indexName] = result; + + next(); + } else { + req.session.sendResponse(res, StatusCodes.NOT_FOUND, {}, 'Param bounding failed: ' + paramName); + } + }); + }); + } + + initBoundParams(req: ApiRequest) { + if ( !req.boundParams ) { + req.boundParams = {}; + } + } + + register(backend: Express) { + } +} + + +export default ParamsCallbackManager.instance; -- GitLab