diff --git a/.vscode/tasks.json b/.vscode/tasks.json index ad96eca..1970ba2 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -40,7 +40,7 @@ "args": [ "-r", "${workspaceFolder}/.templates/route", - "${workspaceFolder}/src/routes/v1/${input:routeName}" + "${workspaceFolder}/src/routes/${input:routeName}" ] }, { diff --git a/README.md b/README.md index 20d8ef4..207083f 100644 --- a/README.md +++ b/README.md @@ -170,27 +170,26 @@ The repository [**React.js Isomorphic Web Application Architecture**] has a comp │ │ ├── utils.ts │ │ └── validator.ts │ ├── routes -│ │ └── v1 -│ │ ├── access -│ │ │ ├── credential.ts -│ │ │ ├── login.ts -│ │ │ ├── logout.ts -│ │ │ ├── schema.ts -│ │ │ ├── signup.ts -│ │ │ ├── token.ts -│ │ │ └── utils.ts -│ │ ├── blog -│ │ │ ├── editor.ts -│ │ │ ├── index.ts -│ │ │ ├── schema.ts -│ │ │ └── writer.ts -│ │   ├── blogs -│ │   │   ├── index.ts -│ │   │   └── schema.ts -│ │ ├── index.ts -│ │ └── profile -│ │ ├── schema.ts -│ │ └── user.ts +│ │ ├── access +│ │ │ ├── credential.ts +│ │ │ ├── login.ts +│ │ │ ├── logout.ts +│ │ │ ├── schema.ts +│ │ │ ├── signup.ts +│ │ │ ├── token.ts +│ │ │ └── utils.ts +│ │ ├── blog +│ │ │ ├── editor.ts +│ │ │ ├── index.ts +│ │ │ ├── schema.ts +│ │ │ └── writer.ts +│ │   ├── blogs +│ │   │   ├── index.ts +│ │   │   └── schema.ts +│ │ ├── index.ts +│ │ └── profile +│ │ ├── schema.ts +│ │ └── user.ts │ └── types │ └── app-request.d.ts ├── tests @@ -216,22 +215,21 @@ The repository [**React.js Isomorphic Web Application Architecture**] has a comp │ ├── database │ │ └── mock.ts │ ├── routes -│ │ └── v1 -│ │ ├── access -│ │ │ ├── login -│ │ │ │ ├── integration.test.ts -│ │ │ │ ├── mock.ts -│ │ │ │ └── unit.test.ts -│ │ │ └── signup -│ │ │ ├── mock.ts -│ │ │ └── unit.test.ts -│ │ └── blog -│ │ ├── index -│ │ │ ├── mock.ts -│ │ │ └── unit.test.ts -│ │ └── writer -│ │ ├── mock.ts -│ │ └── unit.test.ts +│ │ ├── access +│ │ │ ├── login +│ │ │ │ ├── integration.test.ts +│ │ │ │ ├── mock.ts +│ │ │ │ └── unit.test.ts +│ │ │ └── signup +│ │ │ ├── mock.ts +│ │ │ └── unit.test.ts +│ │ └── blog +│ │ ├── index +│ │ │ ├── mock.ts +│ │ │ └── unit.test.ts +│ │ └── writer +│ │ ├── mock.ts +│ │ └── unit.test.ts │ ├── .env.test │ └── setup.ts ├── addons @@ -256,13 +254,13 @@ The repository [**React.js Isomorphic Web Application Architecture**] has a comp ``` ## Directory Traversal for Signup API call - `/src → server.ts → app.ts → /routes/v1/index.ts → /auth/apikey.ts → schema.ts → /helpers/validator.ts → asyncHandler.ts → /routes/v1/access/signup.ts → schema.ts → /helpers/validator.ts → asyncHandler.ts → /database/repository/UserRepo.ts → /database/model/User.ts → /core/ApiResponses.ts` + `/src → server.ts → app.ts → /routes/index.ts → /auth/apikey.ts → schema.ts → /helpers/validator.ts → asyncHandler.ts → /routes/access/signup.ts → schema.ts → /helpers/validator.ts → asyncHandler.ts → /database/repository/UserRepo.ts → /database/model/User.ts → /core/ApiResponses.ts` ## API Examples * Signup * Method and Headers ``` - POST /v1/signup/basic HTTP/1.1 + POST /signup/basic HTTP/1.1 Host: localhost:3000 x-api-key: GCMUDiuY5a7WvyUNt9n3QztToSHzK7Uj Content-Type: application/json @@ -311,7 +309,7 @@ The repository [**React.js Isomorphic Web Application Architecture**] has a comp * Profile Private * Method and Headers ``` - GET /v1/profile/my HTTP/1.1 + GET /profile/my HTTP/1.1 Host: localhost:3000 x-api-key: GCMUDiuY5a7WvyUNt9n3QztToSHzK7Uj Content-Type: application/json diff --git a/addons/postman/NodeJS Backend Architecture Typescript.postman_collection.json b/addons/postman/NodeJS Backend Architecture Typescript.postman_collection.json index 3191179..88b932d 100644 --- a/addons/postman/NodeJS Backend Architecture Typescript.postman_collection.json +++ b/addons/postman/NodeJS Backend Architecture Typescript.postman_collection.json @@ -34,12 +34,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/signup/basic", + "raw": "{{BASE_URL}}/signup/basic", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "signup", "basic" ] @@ -74,12 +73,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/signup/basic", + "raw": "{{BASE_URL}}/signup/basic", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "signup", "basic" ] @@ -154,12 +152,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/login/basic", + "raw": "{{BASE_URL}}/login/basic", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "login", "basic" ] @@ -193,12 +190,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/login/basic", + "raw": "{{BASE_URL}}/login/basic", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "login", "basic" ] @@ -282,12 +278,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/logout", + "raw": "{{BASE_URL}}/logout", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "logout" ] } @@ -319,12 +314,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/logout", + "raw": "{{BASE_URL}}/logout", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "logout" ] } @@ -407,12 +401,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/token/refresh", + "raw": "{{BASE_URL}}/token/refresh", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "token", "refresh" ] @@ -445,12 +438,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/token/refresh", + "raw": "{{BASE_URL}}/token/refresh", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "token", "refresh" ] @@ -516,12 +508,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/profile/public/id/63a197b39e07f859826e662a", + "raw": "{{BASE_URL}}/profile/public/id/63a197b39e07f859826e662a", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "profile", "public", "id", @@ -558,12 +549,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/profile/my", + "raw": "{{BASE_URL}}/profile/my", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "profile", "my" ] @@ -587,12 +577,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/profile/my", + "raw": "{{BASE_URL}}/profile/my", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "profile", "my" ] @@ -676,12 +665,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/profile", + "raw": "{{BASE_URL}}/profile", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "profile" ] } @@ -713,12 +701,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/profile", + "raw": "{{BASE_URL}}/profile", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "profile" ] } @@ -801,12 +788,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/blog/writer", + "raw": "{{BASE_URL}}/blog/writer", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer" ] @@ -839,12 +825,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/blog/writer", + "raw": "{{BASE_URL}}/blog/writer", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer" ] @@ -928,12 +913,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "id", @@ -968,12 +952,11 @@ } }, "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "id", @@ -1050,12 +1033,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/submit/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/submit/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "submit", @@ -1081,12 +1063,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/submit/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/submit/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "submit", @@ -1163,12 +1144,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/withdraw/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/withdraw/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "withdraw", @@ -1194,12 +1174,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/withdraw/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/withdraw/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "withdraw", @@ -1276,12 +1255,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/id/63a1a3a2a2730d1599d46c83", + "raw": "{{BASE_URL}}/blog/writer/id/63a1a3a2a2730d1599d46c83", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "id", @@ -1307,12 +1285,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/id/63a1a3a2a2730d1599d46c83", + "raw": "{{BASE_URL}}/blog/writer/id/63a1a3a2a2730d1599d46c83", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "id", @@ -1389,12 +1366,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "id", @@ -1420,12 +1396,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/writer/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "id", @@ -1502,12 +1477,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/drafts/all", + "raw": "{{BASE_URL}}/blog/writer/drafts/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "drafts", @@ -1533,12 +1507,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/drafts/all", + "raw": "{{BASE_URL}}/blog/writer/drafts/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "drafts", @@ -1615,12 +1588,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/submitted/all", + "raw": "{{BASE_URL}}/blog/writer/submitted/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "submitted", @@ -1646,12 +1618,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/submitted/all", + "raw": "{{BASE_URL}}/blog/writer/submitted/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "submitted", @@ -1728,12 +1699,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/published/all", + "raw": "{{BASE_URL}}/blog/writer/published/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "published", @@ -1759,12 +1729,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/writer/published/all", + "raw": "{{BASE_URL}}/blog/writer/published/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "writer", "published", @@ -1841,12 +1810,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/publish/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/editor/publish/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "publish", @@ -1872,12 +1840,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/publish/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/editor/publish/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "publish", @@ -1954,12 +1921,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/unpublish/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/editor/unpublish/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "unpublish", @@ -1985,12 +1951,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/unpublish/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/editor/unpublish/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "unpublish", @@ -2067,12 +2032,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/id/63a1a569a2730d1599d46cdd", + "raw": "{{BASE_URL}}/blog/editor/id/63a1a569a2730d1599d46cdd", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "id", @@ -2098,12 +2062,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/id/63a1a569a2730d1599d46cdd", + "raw": "{{BASE_URL}}/blog/editor/id/63a1a569a2730d1599d46cdd", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "id", @@ -2180,12 +2143,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/published/all", + "raw": "{{BASE_URL}}/blog/editor/published/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "published", @@ -2211,12 +2173,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/published/all", + "raw": "{{BASE_URL}}/blog/editor/published/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "published", @@ -2293,12 +2254,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/submitted/all", + "raw": "{{BASE_URL}}/blog/editor/submitted/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "submitted", @@ -2324,12 +2284,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/submitted/all", + "raw": "{{BASE_URL}}/blog/editor/submitted/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "submitted", @@ -2406,12 +2365,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/drafts/all", + "raw": "{{BASE_URL}}/blog/editor/drafts/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "drafts", @@ -2437,12 +2395,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/drafts/all", + "raw": "{{BASE_URL}}/blog/editor/drafts/all", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "drafts", @@ -2519,12 +2476,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/editor/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "id", @@ -2550,12 +2506,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/editor/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/editor/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "editor", "id", @@ -2623,12 +2578,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "id", "63a1a1b1a2730d1599d46c55" @@ -2654,12 +2608,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blog/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "id", "63a1a1b1a2730d1599d46c55" @@ -2726,12 +2679,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/url?endpoint=introduction-to-node-js-and-how-node-js-works", + "raw": "{{BASE_URL}}/blog/url?endpoint=introduction-to-node-js-and-how-node-js-works", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "url" ], @@ -2762,12 +2714,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blog/url?endpoint=introduction-to-node-js-and-how-node-js-works", + "raw": "{{BASE_URL}}/blog/url?endpoint=introduction-to-node-js-and-how-node-js-works", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blog", "url" ], @@ -2839,12 +2790,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/tag/BACKEND?pageNumber=1&pageItemCount=10", + "raw": "{{BASE_URL}}/blogs/tag/BACKEND?pageNumber=1&pageItemCount=10", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "tag", "BACKEND" @@ -2880,12 +2830,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/tag/BACKEND?pageNumber=1&pageItemCount=10", + "raw": "{{BASE_URL}}/blogs/tag/BACKEND?pageNumber=1&pageItemCount=10", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "tag", "BACKEND" @@ -2962,12 +2911,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/latest?pageNumber=1&pageItemCount=10", + "raw": "{{BASE_URL}}/blogs/latest?pageNumber=1&pageItemCount=10", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "latest" ], @@ -3002,12 +2950,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/latest?pageNumber=1&pageItemCount=10", + "raw": "{{BASE_URL}}/blogs/latest?pageNumber=1&pageItemCount=10", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "latest" ], @@ -3083,12 +3030,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/author/id/63a197b39e07f859826e662a", + "raw": "{{BASE_URL}}/blogs/author/id/63a197b39e07f859826e662a", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "author", "id", @@ -3115,12 +3061,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/author/id/63a197b39e07f859826e662a", + "raw": "{{BASE_URL}}/blogs/author/id/63a197b39e07f859826e662a", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "author", "id", @@ -3188,12 +3133,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/similar/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blogs/similar/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "similar", "id", @@ -3220,12 +3164,11 @@ } ], "url": { - "raw": "{{BASE_URL}}/v1/blogs/similar/id/63a1a1b1a2730d1599d46c55", + "raw": "{{BASE_URL}}/blogs/similar/id/63a1a1b1a2730d1599d46c55", "host": [ "{{BASE_URL}}" ], "path": [ - "v1", "blogs", "similar", "id", diff --git a/src/app.ts b/src/app.ts index 6efe133..31f6df5 100644 --- a/src/app.ts +++ b/src/app.ts @@ -10,7 +10,7 @@ import { InternalError, ErrorType, } from './core/ApiError'; -import routesV1 from './routes/v1'; +import routes from './routes'; process.on('uncaughtException', (e) => { Logger.error(e); @@ -25,7 +25,7 @@ app.use( app.use(cors({ origin: corsUrl, optionsSuccessStatus: 200 })); // Routes -app.use('/v1', routesV1); +app.use('/', routes); // catch 404 and forward to error handler app.use((req, res, next) => next(new NotFoundError())); diff --git a/src/routes/v1/access/credential.ts b/src/routes/access/credential.ts similarity index 61% rename from src/routes/v1/access/credential.ts rename to src/routes/access/credential.ts index 268ea29..f6cba40 100644 --- a/src/routes/v1/access/credential.ts +++ b/src/routes/access/credential.ts @@ -1,19 +1,19 @@ import express from 'express'; -import { SuccessResponse } from '../../../core/ApiResponse'; +import { SuccessResponse } from '../../core/ApiResponse'; import { RoleRequest } from 'app-request'; -import UserRepo from '../../../database/repository/UserRepo'; -import { BadRequestError } from '../../../core/ApiError'; -import User from '../../../database/model/User'; -import validator from '../../../helpers/validator'; +import UserRepo from '../../database/repository/UserRepo'; +import { BadRequestError } from '../../core/ApiError'; +import User from '../../database/model/User'; +import validator from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; +import asyncHandler from '../../helpers/asyncHandler'; import bcrypt from 'bcrypt'; import _ from 'lodash'; -import { RoleCode } from '../../../database/model/Role'; -import role from '../../../helpers/role'; -import authorization from '../../../auth/authorization'; -import authentication from '../../../auth/authentication'; -import KeystoreRepo from '../../../database/repository/KeystoreRepo'; +import { RoleCode } from '../../database/model/Role'; +import role from '../../helpers/role'; +import authorization from '../../auth/authorization'; +import authentication from '../../auth/authentication'; +import KeystoreRepo from '../../database/repository/KeystoreRepo'; const router = express.Router(); diff --git a/src/routes/v1/access/login.ts b/src/routes/access/login.ts similarity index 69% rename from src/routes/v1/access/login.ts rename to src/routes/access/login.ts index dac3715..e033c69 100755 --- a/src/routes/v1/access/login.ts +++ b/src/routes/access/login.ts @@ -1,16 +1,16 @@ import express from 'express'; -import { SuccessResponse } from '../../../core/ApiResponse'; +import { SuccessResponse } from '../../core/ApiResponse'; import crypto from 'crypto'; -import UserRepo from '../../../database/repository/UserRepo'; -import { BadRequestError, AuthFailureError } from '../../../core/ApiError'; -import KeystoreRepo from '../../../database/repository/KeystoreRepo'; -import { createTokens } from '../../../auth/authUtils'; -import validator from '../../../helpers/validator'; +import UserRepo from '../../database/repository/UserRepo'; +import { BadRequestError, AuthFailureError } from '../../core/ApiError'; +import KeystoreRepo from '../../database/repository/KeystoreRepo'; +import { createTokens } from '../../auth/authUtils'; +import validator from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; +import asyncHandler from '../../helpers/asyncHandler'; import bcrypt from 'bcrypt'; import { getUserData } from './utils'; -import { PublicRequest } from '../../../types/app-request'; +import { PublicRequest } from '../../types/app-request'; const router = express.Router(); diff --git a/src/routes/v1/access/logout.ts b/src/routes/access/logout.ts similarity index 67% rename from src/routes/v1/access/logout.ts rename to src/routes/access/logout.ts index c4a2448..55049ab 100755 --- a/src/routes/v1/access/logout.ts +++ b/src/routes/access/logout.ts @@ -1,9 +1,9 @@ import express from 'express'; -import KeystoreRepo from '../../../database/repository/KeystoreRepo'; +import KeystoreRepo from '../../database/repository/KeystoreRepo'; import { ProtectedRequest } from 'app-request'; -import { SuccessMsgResponse } from '../../../core/ApiResponse'; -import asyncHandler from '../../../helpers/asyncHandler'; -import authentication from '../../../auth/authentication'; +import { SuccessMsgResponse } from '../../core/ApiResponse'; +import asyncHandler from '../../helpers/asyncHandler'; +import authentication from '../../auth/authentication'; const router = express.Router(); diff --git a/src/routes/v1/access/schema.ts b/src/routes/access/schema.ts similarity index 90% rename from src/routes/v1/access/schema.ts rename to src/routes/access/schema.ts index f1787ac..27d2f5d 100644 --- a/src/routes/v1/access/schema.ts +++ b/src/routes/access/schema.ts @@ -1,5 +1,5 @@ import Joi from 'joi'; -import { JoiAuthBearer } from '../../../helpers/validator'; +import { JoiAuthBearer } from '../../helpers/validator'; export default { credential: Joi.object().keys({ diff --git a/src/routes/v1/access/signup.ts b/src/routes/access/signup.ts similarity index 74% rename from src/routes/v1/access/signup.ts rename to src/routes/access/signup.ts index 9209645..a863ecf 100644 --- a/src/routes/v1/access/signup.ts +++ b/src/routes/access/signup.ts @@ -1,16 +1,16 @@ import express from 'express'; -import { SuccessResponse } from '../../../core/ApiResponse'; +import { SuccessResponse } from '../../core/ApiResponse'; import { RoleRequest } from 'app-request'; import crypto from 'crypto'; -import UserRepo from '../../../database/repository/UserRepo'; -import { BadRequestError } from '../../../core/ApiError'; -import User from '../../../database/model/User'; -import { createTokens } from '../../../auth/authUtils'; -import validator from '../../../helpers/validator'; +import UserRepo from '../../database/repository/UserRepo'; +import { BadRequestError } from '../../core/ApiError'; +import User from '../../database/model/User'; +import { createTokens } from '../../auth/authUtils'; +import validator from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; +import asyncHandler from '../../helpers/asyncHandler'; import bcrypt from 'bcrypt'; -import { RoleCode } from '../../../database/model/Role'; +import { RoleCode } from '../../database/model/Role'; import { getUserData } from './utils'; const router = express.Router(); diff --git a/src/routes/v1/access/token.ts b/src/routes/access/token.ts similarity index 79% rename from src/routes/v1/access/token.ts rename to src/routes/access/token.ts index 0388636..1278681 100644 --- a/src/routes/v1/access/token.ts +++ b/src/routes/access/token.ts @@ -1,20 +1,20 @@ import express from 'express'; -import { TokenRefreshResponse } from '../../../core/ApiResponse'; +import { TokenRefreshResponse } from '../../core/ApiResponse'; import { ProtectedRequest } from 'app-request'; import { Types } from 'mongoose'; -import UserRepo from '../../../database/repository/UserRepo'; -import { AuthFailureError } from '../../../core/ApiError'; -import JWT from '../../../core/JWT'; -import KeystoreRepo from '../../../database/repository/KeystoreRepo'; +import UserRepo from '../../database/repository/UserRepo'; +import { AuthFailureError } from '../../core/ApiError'; +import JWT from '../../core/JWT'; +import KeystoreRepo from '../../database/repository/KeystoreRepo'; import crypto from 'crypto'; import { validateTokenData, createTokens, getAccessToken, -} from '../../../auth/authUtils'; -import validator, { ValidationSource } from '../../../helpers/validator'; +} from '../../auth/authUtils'; +import validator, { ValidationSource } from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; +import asyncHandler from '../../helpers/asyncHandler'; const router = express.Router(); diff --git a/src/routes/v1/access/utils.ts b/src/routes/access/utils.ts similarity index 82% rename from src/routes/v1/access/utils.ts rename to src/routes/access/utils.ts index d60a849..c65539f 100644 --- a/src/routes/v1/access/utils.ts +++ b/src/routes/access/utils.ts @@ -1,4 +1,4 @@ -import User from '../../../database/model/User'; +import User from '../../database/model/User'; import _ from 'lodash'; export const enum AccessMode { diff --git a/src/routes/v1/blog/editor.ts b/src/routes/blog/editor.ts similarity index 84% rename from src/routes/v1/blog/editor.ts rename to src/routes/blog/editor.ts index b428a2f..05805f2 100755 --- a/src/routes/v1/blog/editor.ts +++ b/src/routes/blog/editor.ts @@ -1,16 +1,16 @@ import express from 'express'; -import { SuccessResponse, SuccessMsgResponse } from '../../../core/ApiResponse'; +import { SuccessResponse, SuccessMsgResponse } from '../../core/ApiResponse'; import { ProtectedRequest } from 'app-request'; -import { BadRequestError, ForbiddenError } from '../../../core/ApiError'; -import BlogRepo from '../../../database/repository/BlogRepo'; -import { RoleCode } from '../../../database/model/Role'; +import { BadRequestError, ForbiddenError } from '../../core/ApiError'; +import BlogRepo from '../../database/repository/BlogRepo'; +import { RoleCode } from '../../database/model/Role'; import { Types } from 'mongoose'; -import validator, { ValidationSource } from '../../../helpers/validator'; +import validator, { ValidationSource } from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; -import authentication from '../../../auth/authentication'; -import authorization from '../../../auth/authorization'; -import role from '../../../helpers/role'; +import asyncHandler from '../../helpers/asyncHandler'; +import authentication from '../../auth/authentication'; +import authorization from '../../auth/authorization'; +import role from '../../helpers/role'; const router = express.Router(); diff --git a/src/routes/v1/blog/index.ts b/src/routes/blog/index.ts similarity index 77% rename from src/routes/v1/blog/index.ts rename to src/routes/blog/index.ts index 5edadf6..19b3dc8 100644 --- a/src/routes/v1/blog/index.ts +++ b/src/routes/blog/index.ts @@ -1,14 +1,14 @@ import express from 'express'; -import { SuccessResponse } from '../../../core/ApiResponse'; -import asyncHandler from '../../../helpers/asyncHandler'; -import validator, { ValidationSource } from '../../../helpers/validator'; +import { SuccessResponse } from '../../core/ApiResponse'; +import asyncHandler from '../../helpers/asyncHandler'; +import validator, { ValidationSource } from '../../helpers/validator'; import schema from './schema'; -import { NotFoundError } from '../../../core/ApiError'; -import BlogRepo from '../../../database/repository/BlogRepo'; +import { NotFoundError } from '../../core/ApiError'; +import BlogRepo from '../../database/repository/BlogRepo'; import { Types } from 'mongoose'; import writer from './writer'; import editor from './editor'; -import BlogCache from '../../../cache/repository/BlogCache'; +import BlogCache from '../../cache/repository/BlogCache'; const router = express.Router(); diff --git a/src/routes/v1/blog/schema.ts b/src/routes/blog/schema.ts similarity index 93% rename from src/routes/v1/blog/schema.ts rename to src/routes/blog/schema.ts index dd5b468..ee2eb9c 100644 --- a/src/routes/v1/blog/schema.ts +++ b/src/routes/blog/schema.ts @@ -1,5 +1,5 @@ import Joi from 'joi'; -import { JoiObjectId, JoiUrlEndpoint } from '../../../helpers/validator'; +import { JoiObjectId, JoiUrlEndpoint } from '../../helpers/validator'; export default { blogUrl: Joi.object().keys({ diff --git a/src/routes/v1/blog/writer.ts b/src/routes/blog/writer.ts similarity index 90% rename from src/routes/v1/blog/writer.ts rename to src/routes/blog/writer.ts index 1442467..aeb9a2a 100755 --- a/src/routes/v1/blog/writer.ts +++ b/src/routes/blog/writer.ts @@ -1,17 +1,17 @@ import express from 'express'; -import { SuccessResponse, SuccessMsgResponse } from '../../../core/ApiResponse'; +import { SuccessResponse, SuccessMsgResponse } from '../../core/ApiResponse'; import { ProtectedRequest } from 'app-request'; -import { BadRequestError, ForbiddenError } from '../../../core/ApiError'; -import BlogRepo from '../../../database/repository/BlogRepo'; -import Blog from '../../../database/model/Blog'; -import { RoleCode } from '../../../database/model/Role'; +import { BadRequestError, ForbiddenError } from '../../core/ApiError'; +import BlogRepo from '../../database/repository/BlogRepo'; +import Blog from '../../database/model/Blog'; +import { RoleCode } from '../../database/model/Role'; import { Types } from 'mongoose'; -import validator, { ValidationSource } from '../../../helpers/validator'; +import validator, { ValidationSource } from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; -import authentication from '../../../auth/authentication'; -import authorization from '../../../auth/authorization'; -import role from '../../../helpers/role'; +import asyncHandler from '../../helpers/asyncHandler'; +import authentication from '../../auth/authentication'; +import authorization from '../../auth/authorization'; +import role from '../../helpers/role'; const router = express.Router(); diff --git a/src/routes/v1/blogs/index.ts b/src/routes/blogs/index.ts similarity index 81% rename from src/routes/v1/blogs/index.ts rename to src/routes/blogs/index.ts index 5f96ba0..29cb37b 100644 --- a/src/routes/v1/blogs/index.ts +++ b/src/routes/blogs/index.ts @@ -1,13 +1,13 @@ import express from 'express'; -import { SuccessResponse } from '../../../core/ApiResponse'; -import asyncHandler from '../../../helpers/asyncHandler'; -import validator, { ValidationSource } from '../../../helpers/validator'; +import { SuccessResponse } from '../../core/ApiResponse'; +import asyncHandler from '../../helpers/asyncHandler'; +import validator, { ValidationSource } from '../../helpers/validator'; import schema from './schema'; -import { BadRequestError } from '../../../core/ApiError'; -import BlogRepo from '../../../database/repository/BlogRepo'; +import { BadRequestError } from '../../core/ApiError'; +import BlogRepo from '../../database/repository/BlogRepo'; import { Types } from 'mongoose'; -import User from '../../../database/model/User'; -import BlogsCache from '../../../cache/repository/BlogsCache'; +import User from '../../database/model/User'; +import BlogsCache from '../../cache/repository/BlogsCache'; const router = express.Router(); diff --git a/src/routes/v1/blogs/schema.ts b/src/routes/blogs/schema.ts similarity index 87% rename from src/routes/v1/blogs/schema.ts rename to src/routes/blogs/schema.ts index 320f38c..b04ff82 100644 --- a/src/routes/v1/blogs/schema.ts +++ b/src/routes/blogs/schema.ts @@ -1,5 +1,5 @@ import Joi from 'joi'; -import { JoiObjectId } from '../../../helpers/validator'; +import { JoiObjectId } from '../../helpers/validator'; export default { blogId: Joi.object().keys({ diff --git a/src/routes/v1/index.ts b/src/routes/index.ts similarity index 86% rename from src/routes/v1/index.ts rename to src/routes/index.ts index 045ced9..dccc840 100644 --- a/src/routes/v1/index.ts +++ b/src/routes/index.ts @@ -1,7 +1,7 @@ import express from 'express'; -import apikey from '../../auth/apikey'; -import permission from '../../helpers/permission'; -import { Permission } from '../../database/model/ApiKey'; +import apikey from '../auth/apikey'; +import permission from '../helpers/permission'; +import { Permission } from '../database/model/ApiKey'; import signup from './access/signup'; import login from './access/login'; import logout from './access/logout'; diff --git a/src/routes/v1/profile/index.ts b/src/routes/profile/index.ts similarity index 78% rename from src/routes/v1/profile/index.ts rename to src/routes/profile/index.ts index 0eeb9c0..41ee16e 100644 --- a/src/routes/v1/profile/index.ts +++ b/src/routes/profile/index.ts @@ -1,13 +1,13 @@ import express from 'express'; -import { SuccessResponse } from '../../../core/ApiResponse'; -import UserRepo from '../../../database/repository/UserRepo'; +import { SuccessResponse } from '../../core/ApiResponse'; +import UserRepo from '../../database/repository/UserRepo'; import { ProtectedRequest } from 'app-request'; -import { BadRequestError } from '../../../core/ApiError'; -import validator from '../../../helpers/validator'; +import { BadRequestError } from '../../core/ApiError'; +import validator from '../../helpers/validator'; import schema from './schema'; -import asyncHandler from '../../../helpers/asyncHandler'; +import asyncHandler from '../../helpers/asyncHandler'; import _ from 'lodash'; -import authentication from '../../../auth/authentication'; +import authentication from '../../auth/authentication'; const router = express.Router(); diff --git a/src/routes/v1/profile/schema.ts b/src/routes/profile/schema.ts similarity index 81% rename from src/routes/v1/profile/schema.ts rename to src/routes/profile/schema.ts index 998415e..ab9e4d7 100644 --- a/src/routes/v1/profile/schema.ts +++ b/src/routes/profile/schema.ts @@ -1,5 +1,5 @@ import Joi from 'joi'; -import { JoiObjectId } from '../../../helpers/validator'; +import { JoiObjectId } from '../../helpers/validator'; export default { userId: Joi.object().keys({ diff --git a/tests/auth/apikey/unit.test.ts b/tests/auth/apikey/unit.test.ts index 428edec..f0475e6 100644 --- a/tests/auth/apikey/unit.test.ts +++ b/tests/auth/apikey/unit.test.ts @@ -5,7 +5,7 @@ import app from '../../../src/app'; import supertest from 'supertest'; describe('apikey validation', () => { - const endpoint = '/v1/dummy/test'; + const endpoint = '/dummy/test'; const request = supertest(app); beforeEach(() => { diff --git a/tests/auth/authentication/unit.test.ts b/tests/auth/authentication/unit.test.ts index 0a73054..cd5ed46 100644 --- a/tests/auth/authentication/unit.test.ts +++ b/tests/auth/authentication/unit.test.ts @@ -15,7 +15,7 @@ import app from '../../../src/app'; import supertest from 'supertest'; describe('authentication validation', () => { - const endpoint = '/v1/profile/my/test'; + const endpoint = '/profile/my/test'; const request = supertest(app); beforeEach(() => { diff --git a/tests/auth/authorization/unit.test.ts b/tests/auth/authorization/unit.test.ts index 75b35c7..166fede 100644 --- a/tests/auth/authorization/unit.test.ts +++ b/tests/auth/authorization/unit.test.ts @@ -15,7 +15,7 @@ import supertest from 'supertest'; import { RoleCode } from '../../../src/database/model/Role'; describe('authentication validation for editor', () => { - const endpoint = '/v1/blog/editor/test'; + const endpoint = '/blog/editor/test'; const request = supertest(app); beforeEach(() => { @@ -37,7 +37,7 @@ describe('authentication validation for editor', () => { }); describe('authentication validation for writer', () => { - const endpoint = '/v1/blog/writer/test'; + const endpoint = '/blog/writer/test'; const request = supertest(app); beforeEach(() => { diff --git a/tests/routes/v1/access/login/integration.test.ts b/tests/routes/access/login/integration.test.ts similarity index 90% rename from tests/routes/v1/access/login/integration.test.ts rename to tests/routes/access/login/integration.test.ts index e3295c3..2a32a27 100644 --- a/tests/routes/v1/access/login/integration.test.ts +++ b/tests/routes/access/login/integration.test.ts @@ -1,17 +1,17 @@ jest.resetAllMocks(); // make sure we do not have any mocks set from unit tests import supertest from 'supertest'; -import app from '../../../../../src/app'; -import UserRepo from '../../../../../src/database/repository/UserRepo'; -import KeystoreRepo from '../../../../../src/database/repository/KeystoreRepo'; -import User, { UserModel } from '../../../../../src/database/model/User'; +import app from '../../../../src/app'; +import UserRepo from '../../../../src/database/repository/UserRepo'; +import KeystoreRepo from '../../../../src/database/repository/KeystoreRepo'; +import User, { UserModel } from '../../../../src/database/model/User'; import bcrypt from 'bcrypt'; -import * as authUtils from '../../../../../src/auth/authUtils'; -import Role, { RoleCode } from '../../../../../src/database/model/Role'; +import * as authUtils from '../../../../src/auth/authUtils'; +import Role, { RoleCode } from '../../../../src/database/model/Role'; import { Types } from 'mongoose'; -import ApiKey, { ApiKeyModel } from '../../../../../src/database/model/ApiKey'; -import { connection } from '../../../../../src/database'; -import cache from '../../../../../src/cache'; +import ApiKey, { ApiKeyModel } from '../../../../src/database/model/ApiKey'; +import { connection } from '../../../../src/database'; +import cache from '../../../../src/cache'; export const createTokensSpy = jest.spyOn(authUtils, 'createTokens'); export const bcryptCompareSpy = jest.spyOn(bcrypt, 'compare'); @@ -19,7 +19,7 @@ export const userFindByEmailSpy = jest.spyOn(UserRepo, 'findByEmail'); export const keystoreCreateSpy = jest.spyOn(KeystoreRepo, 'create'); describe('Login basic route', () => { - const endpoint = '/v1/login/basic'; + const endpoint = '/login/basic'; const request = supertest(app); const password = '123456'; diff --git a/tests/routes/v1/access/login/mock.ts b/tests/routes/access/login/mock.ts similarity index 66% rename from tests/routes/v1/access/login/mock.ts rename to tests/routes/access/login/mock.ts index b4a56ef..50ce13a 100644 --- a/tests/routes/v1/access/login/mock.ts +++ b/tests/routes/access/login/mock.ts @@ -1,10 +1,10 @@ -import { USER_ID } from '../../../../auth/authentication/mock'; -import Keystore from '../../../../../src/database/model/Keystore'; -import User from '../../../../../src/database/model/User'; +import { USER_ID } from '../../../auth/authentication/mock'; +import Keystore from '../../../../src/database/model/Keystore'; +import User from '../../../../src/database/model/User'; import { Types } from 'mongoose'; import bcrypt from 'bcrypt'; -import * as authUtils from '../../../../../src/auth/authUtils'; -import Role from '../../../../../src/database/model/Role'; +import * as authUtils from '../../../../src/auth/authUtils'; +import Role from '../../../../src/database/model/Role'; export const USER_EMAIL = 'random@test.com'; export const USER_PASSWORD = 'abc123'; @@ -44,12 +44,12 @@ export const mockUserFindByEmail = jest.fn( }, ); -jest.mock('../../../../../src/database/repository/KeystoreRepo', () => ({ +jest.mock('../../../../src/database/repository/KeystoreRepo', () => ({ create: mockKeystoreCreate, })); -jest.mock('../../../../../src/database/repository/UserRepo', () => ({ +jest.mock('../../../../src/database/repository/UserRepo', () => ({ findByEmail: mockUserFindByEmail, })); -jest.unmock('../../../../../src/auth/authUtils'); // remove any override made anywhere +jest.unmock('../../../../src/auth/authUtils'); // remove any override made anywhere diff --git a/tests/routes/v1/access/login/unit.test.ts b/tests/routes/access/login/unit.test.ts similarity index 95% rename from tests/routes/v1/access/login/unit.test.ts rename to tests/routes/access/login/unit.test.ts index 1d7d674..e88cadf 100644 --- a/tests/routes/v1/access/login/unit.test.ts +++ b/tests/routes/access/login/unit.test.ts @@ -1,6 +1,6 @@ -import '../../../../database/mock'; -import '../../../../cache/mock'; -import { addHeaders } from '../../../../auth/authentication/mock'; +import '../../../database/mock'; +import '../../../cache/mock'; +import { addHeaders } from '../../../auth/authentication/mock'; // the mock for this class should be below all other mock imports import { @@ -14,10 +14,10 @@ import { } from './mock'; import supertest from 'supertest'; -import app from '../../../../../src/app'; +import app from '../../../../src/app'; describe('Login basic route', () => { - const endpoint = '/v1/login/basic'; + const endpoint = '/login/basic'; const request = supertest(app); beforeEach(() => { diff --git a/tests/routes/v1/access/signup/mock.ts b/tests/routes/access/signup/mock.ts similarity index 78% rename from tests/routes/v1/access/signup/mock.ts rename to tests/routes/access/signup/mock.ts index 2d7505f..d3c61c5 100644 --- a/tests/routes/v1/access/signup/mock.ts +++ b/tests/routes/access/signup/mock.ts @@ -1,6 +1,6 @@ import { mockUserFindByEmail } from '../login/mock'; -import User from '../../../../../src/database/model/User'; -import Keystore from '../../../../../src/database/model/Keystore'; +import User from '../../../../src/database/model/User'; +import Keystore from '../../../../src/database/model/Keystore'; import { Types } from 'mongoose'; import bcrypt from 'bcrypt'; @@ -25,7 +25,7 @@ export const mockUserCreate = jest.fn( }, ); -jest.mock('../../../../../src/database/repository/UserRepo', () => ({ +jest.mock('../../../../src/database/repository/UserRepo', () => ({ findByEmail: mockUserFindByEmail, // utilising already defined mock create: mockUserCreate, })); diff --git a/tests/routes/v1/access/signup/unit.test.ts b/tests/routes/access/signup/unit.test.ts similarity index 96% rename from tests/routes/v1/access/signup/unit.test.ts rename to tests/routes/access/signup/unit.test.ts index b5a9f71..953a1b3 100644 --- a/tests/routes/v1/access/signup/unit.test.ts +++ b/tests/routes/access/signup/unit.test.ts @@ -1,7 +1,7 @@ // importing any mock file let the jest load all the mocks defined in that file -import '../../../../database/mock'; -import '../../../../cache/mock'; -import { addHeaders } from '../../../../auth/authentication/mock'; +import '../../../database/mock'; +import '../../../cache/mock'; +import { addHeaders } from '../../../auth/authentication/mock'; import { mockUserFindByEmail, createTokensSpy, @@ -18,10 +18,10 @@ import { } from './mock'; import supertest from 'supertest'; -import app from '../../../../../src/app'; +import app from '../../../../src/app'; describe('Signup basic route', () => { - const endpoint = '/v1/signup/basic'; + const endpoint = '/signup/basic'; const request = supertest(app); const email = 'abc@xyz.com'; diff --git a/tests/routes/v1/blog/index/mock.ts b/tests/routes/blog/index/mock.ts similarity index 86% rename from tests/routes/v1/blog/index/mock.ts rename to tests/routes/blog/index/mock.ts index d57c71e..41cff4a 100644 --- a/tests/routes/v1/blog/index/mock.ts +++ b/tests/routes/blog/index/mock.ts @@ -1,7 +1,7 @@ -import Blog from '../../../../../src/database/model/Blog'; +import Blog from '../../../../src/database/model/Blog'; import { Types } from 'mongoose'; -jest.unmock('../../../../../src/database/repository/BlogRepo'); +jest.unmock('../../../../src/database/repository/BlogRepo'); export const BLOG_ID = new Types.ObjectId(); export const BLOG_2_ID = new Types.ObjectId(); @@ -73,13 +73,13 @@ export const mockPublishedBlogFindById = jest.fn( }, ); -jest.mock('../../../../../src/cache/repository/BlogCache', () => ({ +jest.mock('../../../../src/cache/repository/BlogCache', () => ({ save: mockBlogCacheSave, fetchByUrl: mockBlogCacheFetchByUrl, fetchById: mockBlogCacheFetchById, })); -jest.mock('../../../../../src/database/repository/BlogRepo', () => ({ +jest.mock('../../../../src/database/repository/BlogRepo', () => ({ findPublishedByUrl: mockPublishedBlogFindByUrl, findInfoForPublishedById: mockPublishedBlogFindById, })); diff --git a/tests/routes/v1/blog/index/unit.test.ts b/tests/routes/blog/index/unit.test.ts similarity index 95% rename from tests/routes/v1/blog/index/unit.test.ts rename to tests/routes/blog/index/unit.test.ts index 23c554f..c153529 100644 --- a/tests/routes/v1/blog/index/unit.test.ts +++ b/tests/routes/blog/index/unit.test.ts @@ -1,6 +1,6 @@ -import '../../../../database/mock'; -import '../../../../cache/mock'; -import { addHeaders } from '../../../../auth/authentication/mock'; +import '../../../database/mock'; +import '../../../cache/mock'; +import { addHeaders } from '../../../auth/authentication/mock'; import { mockBlogCacheFetchById, @@ -15,7 +15,7 @@ import { } from './mock'; import supertest from 'supertest'; -import app from '../../../../../src/app'; +import app from '../../../../src/app'; import { Types } from 'mongoose'; describe('BlogDetail by URL route', () => { @@ -26,7 +26,7 @@ describe('BlogDetail by URL route', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/url'; + const endpoint = '/blog/url'; it('Should send error when endpoint query is not passed', async () => { const response = await addHeaders(request.get(endpoint)); @@ -107,7 +107,7 @@ describe('BlogDetail by id route', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/id/'; + const endpoint = '/blog/id/'; it('Should send error when invalid id is passed', async () => { const response = await addHeaders(request.get(endpoint + 'abc')); diff --git a/tests/routes/v1/blog/writer/mock.ts b/tests/routes/blog/writer/mock.ts similarity index 83% rename from tests/routes/v1/blog/writer/mock.ts rename to tests/routes/blog/writer/mock.ts index 1b864dc..9eed3b1 100644 --- a/tests/routes/v1/blog/writer/mock.ts +++ b/tests/routes/blog/writer/mock.ts @@ -1,8 +1,8 @@ -import Blog from '../../../../../src/database/model/Blog'; +import Blog from '../../../../src/database/model/Blog'; import { Types } from 'mongoose'; -import { USER_ID_WRITER } from '../../../../auth/authorization/mock'; +import { USER_ID_WRITER } from '../../../auth/authorization/mock'; -jest.unmock('../../../../../src/database/repository/BlogRepo'); +jest.unmock('../../../../src/database/repository/BlogRepo'); export const BLOG_ID = new Types.ObjectId(); export const BLOG_ID_2 = new Types.ObjectId(); @@ -50,7 +50,7 @@ export const mockFindBlogAllDataById = jest.fn( }, ); -jest.mock('../../../../../src/database/repository/BlogRepo', () => ({ +jest.mock('../../../../src/database/repository/BlogRepo', () => ({ findUrlIfExists: mockBlogFindUrlIfExists, create: mockBlogCreate, update: mockBlogUpdate, diff --git a/tests/routes/v1/blog/writer/unit.test.ts b/tests/routes/blog/writer/unit.test.ts similarity index 96% rename from tests/routes/v1/blog/writer/unit.test.ts rename to tests/routes/blog/writer/unit.test.ts index 71da445..43c991c 100644 --- a/tests/routes/v1/blog/writer/unit.test.ts +++ b/tests/routes/blog/writer/unit.test.ts @@ -1,9 +1,9 @@ -import '../../../../database/mock'; -import '../../../../cache/mock'; -import { addAuthHeaders } from '../../../../auth/authentication/mock'; +import '../../../database/mock'; +import '../../../cache/mock'; +import { addAuthHeaders } from '../../../auth/authentication/mock'; // this import should be below authentication/mock to override for role validation to work -import { WRITER_ACCESS_TOKEN } from '../../../../auth/authorization/mock'; +import { WRITER_ACCESS_TOKEN } from '../../../auth/authorization/mock'; import { BLOG_ID, @@ -16,7 +16,7 @@ import { } from './mock'; import supertest from 'supertest'; -import app from '../../../../../src/app'; +import app from '../../../../src/app'; import { Types } from 'mongoose'; describe('Writer blog create routes', () => { @@ -26,7 +26,7 @@ describe('Writer blog create routes', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/writer'; + const endpoint = '/blog/writer'; it('Should send error if the user do have writer role', async () => { const response = await addAuthHeaders(request.post(endpoint)); @@ -214,7 +214,7 @@ describe('Writer blog submit routes', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/writer/submit/'; + const endpoint = '/blog/writer/submit/'; it('Should send error if submit blog id is not valid', async () => { const response = await addAuthHeaders( @@ -258,7 +258,7 @@ describe('Writer blog withdraw routes', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/writer/withdraw/'; + const endpoint = '/blog/writer/withdraw/'; it('Should send error if withdraw blog id is not valid', async () => { const response = await addAuthHeaders( @@ -302,7 +302,7 @@ describe('Writer blog delete routes', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/writer/id/'; + const endpoint = '/blog/writer/id/'; it('Should send error if deleting blog id is not valid', async () => { const response = await addAuthHeaders( @@ -345,7 +345,7 @@ describe('Writer blog get by id routes', () => { }); const request = supertest(app); - const endpoint = '/v1/blog/writer/id/'; + const endpoint = '/blog/writer/id/'; it('Should send error if fetching blog id is not valid', async () => { const response = await addAuthHeaders(