From 20fa35a5758aae57d0600f007a61223126f56036 Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Tue, 14 Sep 2021 09:44:25 +0700 Subject: [PATCH] Task: Fixed controller and application for routes and allow middleware for json and form urclosed --- src/application.ts | 2 ++ src/controller/index.controller.ts | 5 ++++ src/controller/index.ts | 3 ++- src/controller/person.controller.ts | 36 ++++++++++++++++++++++++++++ src/decorators/handlers.decorator.ts | 8 ++++++- 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/controller/person.controller.ts diff --git a/src/application.ts b/src/application.ts index 7315a7a..272bdd6 100644 --- a/src/application.ts +++ b/src/application.ts @@ -12,6 +12,8 @@ class Application { constructor() { this._instance = express() + this._instance.use(express.json()) + this._instance.use(express.urlencoded({ extended: false })) this.registerRoutes() } diff --git a/src/controller/index.controller.ts b/src/controller/index.controller.ts index 77b6926..84e052a 100644 --- a/src/controller/index.controller.ts +++ b/src/controller/index.controller.ts @@ -10,4 +10,9 @@ export default class IndexController { public index(req: Request, res: Response) { res.send(`Hello Index`) } + + @Get("/:name") + public hello(req: Request, res: Response) { + res.send(`Hello ${req.params.name}`) + } } diff --git a/src/controller/index.ts b/src/controller/index.ts index c026208..eb46bdb 100644 --- a/src/controller/index.ts +++ b/src/controller/index.ts @@ -1,3 +1,4 @@ import IndexController from "./index.controller" +import PersonController from "./person.controller" -export const controllers = [IndexController] +export const controllers = [IndexController, PersonController] diff --git a/src/controller/person.controller.ts b/src/controller/person.controller.ts new file mode 100644 index 0000000..0879876 --- /dev/null +++ b/src/controller/person.controller.ts @@ -0,0 +1,36 @@ +import { Request, Response } from "express" +import Controller from "../decorators/controller.decorator" +import { Post, Get } from "../decorators/handlers.decorator" + +const persons: Array = [ + { + id: 1, + name: "Sambo", + }, +] + +@Controller("/person") +export default class PersonController { + @Get() + public getPersons(req: Request, res: Response) { + res.json(persons) + } + + @Post() + public createPerson(req: Request, res: Response) { + const person = req.body + + if (person == null) { + return res.status(400).json({ + status: 400, + message: "Person is required", + }) + } + + persons.push(person) + res.json({ + message: "Person created successfully", + body: person, + }) + } +} diff --git a/src/decorators/handlers.decorator.ts b/src/decorators/handlers.decorator.ts index 7302240..358a356 100644 --- a/src/decorators/handlers.decorator.ts +++ b/src/decorators/handlers.decorator.ts @@ -3,6 +3,9 @@ import { MetadataKeys } from "../constants/metadata.keys" export enum Method { GET = "get", POST = "post", + PUT = "put", + DELETE = "delete", + PATCH = "patch", } export interface RouteHandler { @@ -12,7 +15,7 @@ export interface RouteHandler { } const methodDecoratorFactory = (method: Method) => { - return (path: string): MethodDecorator => { + return (path: string = ""): MethodDecorator => { return (target: any, propertyKey: string | symbol): void => { const controllerClass = target.constructor const routers: RouteHandler[] = Reflect.hasMetadata( @@ -39,3 +42,6 @@ const methodDecoratorFactory = (method: Method) => { export const Get = methodDecoratorFactory(Method.GET) export const Post = methodDecoratorFactory(Method.POST) +export const Put = methodDecoratorFactory(Method.PUT) +export const Delete = methodDecoratorFactory(Method.DELETE) +export const Patch = methodDecoratorFactory(Method.PATCH)