31 lines
969 B
TypeScript
31 lines
969 B
TypeScript
import type { RequestHandler } from 'express';
|
|
import { CONTROLLER_ROUTES } from './constants';
|
|
import type { Method, RouteMetadata } from './types';
|
|
|
|
interface RouteOptions {
|
|
middlewares?: RequestHandler[];
|
|
}
|
|
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
const RouteFactory =
|
|
(method: Method) =>
|
|
(path: `/${string}`, options: RouteOptions = {}): MethodDecorator =>
|
|
(target, handlerName) => {
|
|
const controllerClass = target.constructor;
|
|
const routes = (Reflect.getMetadata(CONTROLLER_ROUTES, controllerClass) ??
|
|
[]) as RouteMetadata[];
|
|
routes.push({
|
|
method,
|
|
path,
|
|
middlewares: options.middlewares ?? [],
|
|
handlerName: String(handlerName),
|
|
});
|
|
Reflect.defineMetadata(CONTROLLER_ROUTES, routes, controllerClass);
|
|
};
|
|
|
|
export const Get = RouteFactory('get');
|
|
export const Post = RouteFactory('post');
|
|
export const Put = RouteFactory('put');
|
|
export const Patch = RouteFactory('patch');
|
|
export const Delete = RouteFactory('delete');
|