From dcd1debc7360504be921439e3e0386b077de50cf Mon Sep 17 00:00:00 2001 From: dqnid Date: Tue, 29 Oct 2024 23:56:52 +0100 Subject: [PATCH] feat(back): blueprints added + example simple module --- .../__kebabCase_name__.routes.ts | 21 ++++++++++ .../__kebabCase_name__.service.ts | 9 +++++ back-express/src/app.ts | 1 + back-express/src/config.ts | 2 +- back-express/src/db.ts | 10 ++--- .../src/modules/auth/auth.middleware.ts | 6 +++ .../src/modules/example/example.routes.ts | 38 ++++++++++++++++--- .../src/modules/example/example.service.ts | 23 +++++++++++ .../src/modules/example/example.types.ts | 7 ++++ back-express/src/modules/index.ts | 4 +- .../utils/response/response-error.model.ts | 2 +- 11 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.routes.ts create mode 100644 back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.service.ts create mode 100644 back-express/src/modules/example/example.service.ts create mode 100644 back-express/src/modules/example/example.types.ts diff --git a/back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.routes.ts b/back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.routes.ts new file mode 100644 index 0000000..2e5e441 --- /dev/null +++ b/back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.routes.ts @@ -0,0 +1,21 @@ +import { Router } from "express"; +import { ResponseSuccess } from "@/utils/response/response-success.model"; + +import {{pascalCase name}}Service from "./{{kebabCase name}}.service"; + +export const {{camelCase name}}Routes = Router(); + +const {{camelCase name}}Service = new {{pascalCase name}}Service(); + +{{camelCase name}}Routes.get("/", async (_, res) => { + try { + const response = await {{camelCase name}}Service.getAll{{pascalCase name}}(); + res.status(200); + res.send(new ResponseSuccess(response)); + } catch (e) { + res.status(500); + res.send(e); + } +}); + +export { {{camelCase name}}Service }; diff --git a/back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.service.ts b/back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.service.ts new file mode 100644 index 0000000..eedbb22 --- /dev/null +++ b/back-express/.blueprints/module/__kebabCase_name__/__kebabCase_name__.service.ts @@ -0,0 +1,9 @@ +class {{pascalCase name}}Service { + constructor(private info?: string) {} + + async getAll{{pascalCase name}}() { + return Promise.resolve(this.info); + } +} + +export default {{pascalCase name}}Service; diff --git a/back-express/src/app.ts b/back-express/src/app.ts index 121d2ad..0ca9117 100644 --- a/back-express/src/app.ts +++ b/back-express/src/app.ts @@ -12,6 +12,7 @@ if (config.enableCors) { } app.use(express.json()); + // Global middleware app.use(authorizationMiddleware as any); // TODO: move out of here app.use((req, _res, next) => { diff --git a/back-express/src/config.ts b/back-express/src/config.ts index a86f5fe..1c48aa3 100644 --- a/back-express/src/config.ts +++ b/back-express/src/config.ts @@ -3,7 +3,7 @@ import { configDotenv } from "dotenv"; configDotenv(); const config = { - enableCors: false, + enableCors: true, port: process.env.PORT || 3000, baseRoute: "/api/v1", }; diff --git a/back-express/src/db.ts b/back-express/src/db.ts index 94f2997..a414805 100644 --- a/back-express/src/db.ts +++ b/back-express/src/db.ts @@ -2,11 +2,11 @@ import mysql, { QueryError } from "mysql2/promise"; import { ResponseError } from "./utils/response/response-error.model"; const db_pool = mysql.createPool({ - host: "localhost", - port: 3307, - user: "dbuser", - password: "securepassword", - database: "path", + host: process.env.DB_HOST ?? "localhost", + port: parseInt(process.env.DB_PORT ?? "3307"), + user: process.env.DB_USERNAME ?? "dbuser", + password: process.env.DB_PASSWORD ?? "securepassword", + database: process.env.DB_MAIN ?? "path", }); async function DB_Query(query: string): Promise[]> { diff --git a/back-express/src/modules/auth/auth.middleware.ts b/back-express/src/modules/auth/auth.middleware.ts index b5f48b9..8611d75 100644 --- a/back-express/src/modules/auth/auth.middleware.ts +++ b/back-express/src/modules/auth/auth.middleware.ts @@ -14,6 +14,7 @@ async function authorization(req: Request, res: Response, next: NextFunction) { permission.roles.includes(Role.Public) ); }); + if (isPublic) { return next(); } @@ -74,6 +75,11 @@ const authorizationTable: Permissions[] = [ resource: "^/users.*", actions: ["GET"], }, + { + roles: [Role.Public], + resource: "^/example.*", + actions: ["GET", "OPTIONS"], + }, ]; export { authorization as authorizationMiddleware }; diff --git a/back-express/src/modules/example/example.routes.ts b/back-express/src/modules/example/example.routes.ts index 0b042c8..9bbf52f 100644 --- a/back-express/src/modules/example/example.routes.ts +++ b/back-express/src/modules/example/example.routes.ts @@ -1,12 +1,40 @@ import { Router } from "express"; +import ExampleService from "./example.service"; +import { ResponseSuccess } from "../../utils/response/response-success.model"; +import { ResponseError } from "../../utils/response/response-error.model"; + export const exampleRoutes = Router(); -exampleRoutes.get("/", (req, res) => { - res.status(400); - res.send("Something"); +const exampleService = new ExampleService(); + +exampleRoutes.get("/", async (_, res) => { + try { + const response = await exampleService.getAllExamples(); + res.status(200); + res.send(new ResponseSuccess(response)); + } catch (e) { + res.status(500); + res.send(e); + } }); -exampleRoutes.post("/new", (req, res) => { - res.send("Something with " + JSON.stringify(req.body)); +exampleRoutes.get("/:id", async (req, res) => { + try { + const response = await exampleService.getExampleById( + parseInt(req.params.id), + ); + if (response) { + res.status(200); + res.send(new ResponseSuccess(response)); + } else { + res.status(404); + res.send(new ResponseError({ code: "NOT_FOUND", number: 404 })); + } + } catch (e) { + res.status(500); + res.send(e); + } }); + +export { exampleService }; diff --git a/back-express/src/modules/example/example.service.ts b/back-express/src/modules/example/example.service.ts new file mode 100644 index 0000000..e514648 --- /dev/null +++ b/back-express/src/modules/example/example.service.ts @@ -0,0 +1,23 @@ +import { db_query } from "../../db"; +import { Example } from "./example.types"; + +class ExampleService { + constructor(private info?: string) {} + + async getAllExamples(): Promise { + const examples = await db_query("select * from example"); + return examples as Example[]; + } + + async getExampleById(id: number): Promise { + const example = await db_query( + `select * from example as example WHERE id = ${id};`, + ); + if (example.length) { + return example[0] as Example; + } + return null; + } +} + +export default ExampleService; diff --git a/back-express/src/modules/example/example.types.ts b/back-express/src/modules/example/example.types.ts new file mode 100644 index 0000000..7fb3551 --- /dev/null +++ b/back-express/src/modules/example/example.types.ts @@ -0,0 +1,7 @@ +export type Example = { + id: number; + name: string; + description: string; + image: string; + created_at: string; +}; diff --git a/back-express/src/modules/index.ts b/back-express/src/modules/index.ts index 5cc35cf..99d6e19 100644 --- a/back-express/src/modules/index.ts +++ b/back-express/src/modules/index.ts @@ -1,9 +1,9 @@ import express from "express"; import { defaultRoute } from "./default.route"; -import { exampleRoutes } from "./example/example.routes"; import { userRoutes } from "./users/users.routes"; import { authRoutes } from "./auth/auth.routes"; +import { exampleRoutes } from "./example/example.routes"; export const routes = express.Router(); @@ -11,6 +11,6 @@ export const routes = express.Router(); * Routes * */ routes.use("/", defaultRoute); -routes.use("/example", exampleRoutes); routes.use("/users", userRoutes); routes.use("/auth", authRoutes); +routes.use("/example", exampleRoutes); diff --git a/back-express/src/utils/response/response-error.model.ts b/back-express/src/utils/response/response-error.model.ts index 69d322b..d0f47d1 100644 --- a/back-express/src/utils/response/response-error.model.ts +++ b/back-express/src/utils/response/response-error.model.ts @@ -12,7 +12,7 @@ const code_error_mapping: Record = { status: 400, }, 401: { - code: "Unauthorized", + code: "UNAUTHORIZED", status: 401, }, };