2021-09-14 09:06:03 +07:00
|
|
|
import { MetadataKeys } from "../constants/metadata.keys"
|
|
|
|
|
|
|
|
export enum Method {
|
|
|
|
GET = "get",
|
|
|
|
POST = "post",
|
2021-09-14 09:44:25 +07:00
|
|
|
PUT = "put",
|
|
|
|
DELETE = "delete",
|
|
|
|
PATCH = "patch",
|
2021-09-14 09:06:03 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface RouteHandler {
|
|
|
|
method: Method
|
|
|
|
path: string
|
|
|
|
handlerName: string | symbol
|
|
|
|
}
|
|
|
|
|
|
|
|
const methodDecoratorFactory = (method: Method) => {
|
2021-09-14 09:44:25 +07:00
|
|
|
return (path: string = ""): MethodDecorator => {
|
2021-09-14 09:06:03 +07:00
|
|
|
return (target: any, propertyKey: string | symbol): void => {
|
|
|
|
const controllerClass = target.constructor
|
|
|
|
const routers: RouteHandler[] = Reflect.hasMetadata(
|
|
|
|
MetadataKeys.ROUTERS,
|
|
|
|
controllerClass
|
|
|
|
)
|
|
|
|
? Reflect.getMetadata(MetadataKeys.ROUTERS, controllerClass)
|
|
|
|
: []
|
|
|
|
|
|
|
|
routers.push({
|
|
|
|
method,
|
|
|
|
path,
|
|
|
|
handlerName: propertyKey,
|
|
|
|
})
|
|
|
|
|
|
|
|
Reflect.defineMetadata(
|
|
|
|
MetadataKeys.ROUTERS,
|
|
|
|
routers,
|
|
|
|
controllerClass
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export const Get = methodDecoratorFactory(Method.GET)
|
|
|
|
export const Post = methodDecoratorFactory(Method.POST)
|
2021-09-14 09:44:25 +07:00
|
|
|
export const Put = methodDecoratorFactory(Method.PUT)
|
|
|
|
export const Delete = methodDecoratorFactory(Method.DELETE)
|
|
|
|
export const Patch = methodDecoratorFactory(Method.PATCH)
|