diff --git a/README.md b/README.md index 11cfa34..eb7c151 100644 --- a/README.md +++ b/README.md @@ -170,10 +170,6 @@ To integrate `@knovator/masters-node`, you should be having basic `nodejs` appli # or yarn add @knovator/masters-node ``` -2. Enter timezone information in `.env` - ```js - TZ=Asia/Colcutta - ```
@@ -309,6 +305,17 @@ req?.i18n?.(CODE) | `master.findAll` | When all data is fetched | | `master.masterNotFound` | When Master data is not found | +### `descriptor` codes +| Code | Description | +| --- | ----------- | +| `master.create` | For Create API | +| `master.update` | For Update API | +| `master.active` | For `isActive` toggle API | +| `master.default` | For `isDefault` toggle API | +| `master.webVisible` | For `isWebVisible` toggle API | +| `master.sequence` | For `sequence` update API | +| `master.softDelete` | For Soft-Delete API | +| `master.list` | For List API | diff --git a/demo/app.js b/demo/app.js index 922d48e..ad7744b 100644 --- a/demo/app.js +++ b/demo/app.js @@ -5,7 +5,8 @@ require('./src/models/file'); const express = require('express'); const cors = require('cors'); const fileRoute = require('./src/routes/fileRoute'); -const { masters, Master } = require('../.'); +var api = require('express-list-endpoints-descriptor')(express); +const { masters } = require('../.'); const PORT = 8080; const app = express(); @@ -14,6 +15,16 @@ app.use(cors()); app.use(fileRoute); app.use('/admin/masters', masters()); +app.get('/allendpoints', (req, res) => { + //return all endpoints defined inside routes + res.send(api.listAllEndpoints(app)); +}); + +app.get('/endpoints', (req, res) => { + //return all endpoints defined inside routes + res.send(api.listEndpoints(app)); +}); + app.listen(PORT, () => { console.log(`App started on ${PORT}`); }); diff --git a/demo/package.json b/demo/package.json index 287d995..36a3366 100644 --- a/demo/package.json +++ b/demo/package.json @@ -11,6 +11,7 @@ "cors": "^2.8.5", "dotenv": "^16.0.1", "express": "^4.18.1", + "express-list-endpoints-descriptor": "^1.0.13", "mongoose": "^6.4.4" } } diff --git a/demo/yarn.lock b/demo/yarn.lock index a9e38e2..c8e054e 100644 --- a/demo/yarn.lock +++ b/demo/yarn.lock @@ -168,6 +168,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +express-list-endpoints-descriptor@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/express-list-endpoints-descriptor/-/express-list-endpoints-descriptor-1.0.13.tgz#f59b771f527be797ca398bf24ba3f357bb5c1942" + integrity sha512-eGEeJNqXa6sVsJW7V3D1UiP9AS9hJ202T7n9zoknvyII+Vnkqm2kwf32diUVer2MqsikhijjEdR3gTguY/ATnw== + express@^4.18.1: version "4.18.1" resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" diff --git a/package.json b/package.json index b80ca8b..39e35fa 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "typescript": "^4.7.4" }, "dependencies": { + "express-list-endpoints-descriptor": "^1.0.13", "joi": "^17.6.0", "mongoose-paginate-v2": "^1.7.0" } diff --git a/src/routes/masterRoutes.ts b/src/routes/masterRoutes.ts index 4b684c5..fcd061d 100644 --- a/src/routes/masterRoutes.ts +++ b/src/routes/masterRoutes.ts @@ -1,71 +1,83 @@ -import express from "express"; -import defaults from "../helpers/defaults"; +import express from 'express'; +require('express-list-endpoints-descriptor')(express); +import defaults from '../helpers/defaults'; +import { IRouter } from '../../types/Router'; -import validate from "../policies/validate"; -import * as masterValidation from "../helpers/validations"; -import * as MasterController from "../controllers/masterController"; +import validate from '../policies/validate'; +import * as masterValidation from '../helpers/validations'; +import * as MasterController from '../controllers/masterController'; + +const routes: IRouter = express.Router(); -const routes = express.Router(); routes.use(express.json()); const authenticate = (req: any, res: any, next: any) => { return defaults.authentication(req, res, next); }; -routes.post( - `/create`, - authenticate, - validate(masterValidation.CreateSchema), - MasterController.createMaster -); -// .descriptor("admin.master.create"); -routes.put( - `/update/:id`, - authenticate, - validate(masterValidation.UpdateSchema), - MasterController.updateMaster -); -// .descriptor("admin.master.update"); -routes.patch( - `/partial-update/activate/:id`, - authenticate, - validate(masterValidation.activate), - MasterController.activateMaster -); -// .descriptor("admin.master.active"); -routes.patch( - `/partial-update/default/:id`, - authenticate, - validate(masterValidation.isDefault), - MasterController.defaultMaster -); -// .descriptor("admin.master.default"); -routes.patch( - `/partial-update/web-visible/:id`, - authenticate, - validate(masterValidation.webVisible), - MasterController.webVisibleMaster -); -routes.patch( - `/partial-update/sequence`, - authenticate, - validate(masterValidation.sequence), - MasterController.sequenceMaster -); -// .descriptor("admin.master.sequence"); -routes.put( - `/soft-delete`, - authenticate, - validate(masterValidation.DeleteSchema), - MasterController.softDeleteMaster -); -// .descriptor("admin.master.softDelete"); -routes.post( - `/list`, - authenticate, - validate(masterValidation.ListSchema), - MasterController.listMaster -); -// .descriptor("admin.master.getAll"); +routes + .post( + `/create`, + authenticate, + validate(masterValidation.CreateSchema), + MasterController.createMaster + ) + .descriptor('master.create'); +routes + .put( + `/update/:id`, + authenticate, + validate(masterValidation.UpdateSchema), + MasterController.updateMaster + ) + .descriptor('master.update'); +routes + .patch( + `/partial-update/activate/:id`, + authenticate, + validate(masterValidation.activate), + MasterController.activateMaster + ) + .descriptor('master.active'); +routes + .patch( + `/partial-update/default/:id`, + authenticate, + validate(masterValidation.isDefault), + MasterController.defaultMaster + ) + .descriptor('master.default'); +routes + .patch( + `/partial-update/web-visible/:id`, + authenticate, + validate(masterValidation.webVisible), + MasterController.webVisibleMaster + ) + .descriptor('master.webVisible'); +routes + .patch( + `/partial-update/sequence`, + authenticate, + validate(masterValidation.sequence), + MasterController.sequenceMaster + ) + .descriptor('master.sequence'); +routes + .put( + `/soft-delete`, + authenticate, + validate(masterValidation.DeleteSchema), + MasterController.softDeleteMaster + ) + .descriptor('master.softDelete'); +routes + .post( + `/list`, + authenticate, + validate(masterValidation.ListSchema), + MasterController.listMaster + ) + .descriptor('master.list'); export default routes; diff --git a/types/Router.d.ts b/types/Router.d.ts new file mode 100644 index 0000000..cc93651 --- /dev/null +++ b/types/Router.d.ts @@ -0,0 +1,5 @@ +import { Router } from 'express'; + +export interface IRouter extends Router { + descriptor?: any; +} diff --git a/types/index.d.ts b/types/index.d.ts index f6371d8..a4fab0a 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,3 +1,6 @@ +declare module 'express-list-endpoints-descriptor' { + function listEndpoints(routes: any): any; +} declare module '@knovator/masters-node' { export type MastersProps = { convertToTz: (params: any) => any; @@ -8,8 +11,15 @@ declare module '@knovator/masters-node' { }; function masters(props: MastersProps): import('express').Router; - - var Master: import('mongoose').Model