diff --git a/src/middleware/config.ts b/src/middleware/config.ts index 7c8ccb6..2362a1a 100644 --- a/src/middleware/config.ts +++ b/src/middleware/config.ts @@ -1,6 +1,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import {Request, Response} from 'express'; -import {customFields, expressCrudProps, sequelizePropOrFunc} from '../types'; +import {NextFunction, Request, Response} from 'express'; +import { + customFields, + expressCrudProps, + expressFunc, + sequelizePropOrFunc, +} from '../types'; export const getFieldValue = async ( field: sequelizePropOrFunc, @@ -35,3 +40,11 @@ export const buildOptionsFromConfig = async ( } return newConfig; }; + +export const runCustomMiddleware = (middleware?: expressFunc) => { + return middleware + ? middleware + : (req: Request, res: Response, next: NextFunction) => { + next(); + }; +}; diff --git a/src/routes/getList.ts b/src/routes/getList.ts index f7826a7..388bf2c 100644 --- a/src/routes/getList.ts +++ b/src/routes/getList.ts @@ -1,7 +1,10 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import {Router} from 'express'; import {getListOptions, pureModelType} from '../types'; -import {buildOptionsFromConfig} from '../middleware/config'; +import { + buildOptionsFromConfig, + runCustomMiddleware, +} from '../middleware/config'; import { buildOptionsFromQueryParams, checkFilterableFields, @@ -15,6 +18,7 @@ const getListRoute = ( ) => router.get( '/', + runCustomMiddleware(config.middleware), checkFilterableFields(config.filterableFields), checkSortableFields(config.sortableFields), async (req, res) => { diff --git a/src/routes/getOne.ts b/src/routes/getOne.ts index ed9c2cc..2c2fd12 100644 --- a/src/routes/getOne.ts +++ b/src/routes/getOne.ts @@ -1,26 +1,37 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import {Router} from 'express'; -import {getListOptions, getOneOptions, pureModelType} from '../types'; -import {buildOptionsFromConfig} from '../middleware/config'; +import {getOneOptions, pureModelType} from '../types'; +import { + buildOptionsFromConfig, + runCustomMiddleware, +} from '../middleware/config'; const getOneRoute = ( model: pureModelType, router: Router, config: getOneOptions ) => - router.get('/:resourceId', async (req, res) => { - const {middleware, ...sequelizeOptions} = config; - try { - const options = await buildOptionsFromConfig(sequelizeOptions, req, res); + router.get( + '/:resourceId', + runCustomMiddleware(config.middleware), + async (req, res) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const {middleware, ...sequelizeOptions} = config; + try { + const options = await buildOptionsFromConfig( + sequelizeOptions, + req, + res + ); - const data = await model.findByPk(req.params.resourceId, { - ...options, - }); - res.json(data); - } catch (error) { - console.error(error); - res.status(500).send(error); + const data = await model.findByPk(req.params.resourceId, { + ...options, + }); + res.json(data); + } catch (error) { + console.error(error); + res.status(500).send(error); + } } - }); + ); export default getOneRoute; diff --git a/src/types.ts b/src/types.ts index fc0b12a..d08ef5b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -16,7 +16,11 @@ export type modelType = ModelCtor> | string; // eslint-disable-next-line @typescript-eslint/no-explicit-any export type pureModelType = ModelCtor>; -type expressFunc = (req: Request, res: Response, next: NextFunction) => void; +export type expressFunc = ( + req: Request, + res: Response, + next: NextFunction +) => void; export type sequelizeFunc = (req: Request, res: Response) => Promise; @@ -64,7 +68,7 @@ export interface getOneOptions extends operationFieldCore, expressCrudProps, 'where'>> {} -interface createOptions +export interface createOptions extends operationFieldCore, expressCrudProps> { creatableFields?: customFields;