Skip to content

Commit

Permalink
feat: add custom middleware functionallity
Browse files Browse the repository at this point in the history
  • Loading branch information
doralteres committed Sep 5, 2023
1 parent f8b7ae9 commit b9d25b8
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 20 deletions.
17 changes: 15 additions & 2 deletions src/middleware/config.ts
Original file line number Diff line number Diff line change
@@ -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 <T = any>(
field: sequelizePropOrFunc<T>,
Expand Down Expand Up @@ -35,3 +40,11 @@ export const buildOptionsFromConfig = async <T extends {[prop: string]: any}>(
}
return newConfig;
};

export const runCustomMiddleware = (middleware?: expressFunc) => {
return middleware
? middleware
: (req: Request, res: Response, next: NextFunction) => {
next();
};
};
6 changes: 5 additions & 1 deletion src/routes/getList.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -15,6 +18,7 @@ const getListRoute = (
) =>
router.get(
'/',
runCustomMiddleware(config.middleware),
checkFilterableFields(config.filterableFields),
checkSortableFields(config.sortableFields),
async (req, res) => {
Expand Down
41 changes: 26 additions & 15 deletions src/routes/getOne.ts
Original file line number Diff line number Diff line change
@@ -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;
8 changes: 6 additions & 2 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ export type modelType = ModelCtor<Model<any, any>> | string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type pureModelType = ModelCtor<Model<any, any>>;

type expressFunc = (req: Request, res: Response, next: NextFunction) => void;
export type expressFunc = (
req: Request,
res: Response,
next: NextFunction
) => void;

export type sequelizeFunc<T> = (req: Request, res: Response) => Promise<T>;

Expand Down Expand Up @@ -64,7 +68,7 @@ export interface getOneOptions
extends operationFieldCore,
expressCrudProps<Omit<NonNullFindOptions<unknown>, 'where'>> {}

interface createOptions
export interface createOptions
extends operationFieldCore,
expressCrudProps<CreateOptions<unknown>> {
creatableFields?: customFields;
Expand Down

0 comments on commit b9d25b8

Please sign in to comment.