Table of Contents
About The Project
@knovator/masters-node
is built with intent to faster development cycle by providing plug & play facility for masters/submasters, that is used almost on every project.
(back to top)
Built With
(back to top)
Getting Started
To integrate @knovator/masters-node
, you should be having basic nodejs
application up and running with express
(optionally using mongoose
for mongodb
database). @knovator/masters-node
add routes for masters in application.
Prerequisites
- It's good start to have
nodejs
application up and running with express
(optionally using mongoose
for mongodb
database). Good to have used i18next to add message in response codes.
routes
uses mongoose
connection established by application, so it's required to connect to database before using package. Example,
const mongoose = require('mongoose');
mongoose
.connect('mongodb://localhost:27017/knovator')
.then(() => console.info('Database connected'))
.catch((err) => {
console.error('DB Error', err);
});
module.exports = mongoose;
- Image upload route for
upload
& remove
is needed to declare externally. Example,
const express = require('express');
const router = express.Router();
router.post(`/files/upload`, (req, res) => {
let uri = "/image.jpg";
let id = "62c54b15524b6b59d2313c02";
res.json({
code: 'SUCCESS',
data: { id, uri },
message: 'File uploaded successfully'
});
});
router.delete(`/files/remove/:id`, (req, res) => {
res.json({
code: 'SUCCESS',
data: {},
message: 'File removed successfully'
})
})
module.exports = router;
Sample App file
require('./src/db');
require('./src/models/file');
const cors = require('cors');
const express = require("express");
const fileRoutes = require('./fileRoute.js');
const PORT = 8080;
const app = express();
app.use(cors());
app.use(express.static("public"));
app.use(fileRoutes);
app.listen(PORT, () => {
console.log(`App started on ${PORT}`);
});
Installation
(back to top)
Usage
App/Main file is a good place to use @knovator/masters-node
...
const { masters } = require('masters-node');
app.use("/admin/masters", masters());
app.listen(PORT, () => {
console.log(`App started on ${PORT}`);
});
Masters package allows providing authentication
, logger
and catchAsync
functions as parameters.
app.use("/admin/masters", masters({
authentication: (req, res, next) => {...},
logger: console,
catchAsync: (function) => (req, res, next) => {...}
}));
parameter explanations
authentication
logger
- Provides ability to add logging for Database and Validation
console
catchAsync
- Wraps functions to handle async errors
function catchAsync(fn) {
return function (req, res, next) {
Promise.resolve(fn(req, res, next)).catch((err) => {
res.status(internalServerError).json({
code: RESPONSE_CODE.ERROR,
message: err.message,
data: {},
});
});
};
}
Routes Infomration
Response follows following structure
{
code: RESPONSE_CODES,
message: ""
data: {}
}
Response Codes
SUCCESS | When request fullfiled without error |
ERROR | When request fullfiled with error |
Custom Validation messages
Master exists | When master/submaster with same code is exist in database |
HTTP Status Codes
200 | When request fullfiled without error |
201 | When document is created |
500 | When internal server occurred |
422 | When Validation error occurred |
Routes
/create | Creates Master/SubMaster record |
/update:id | Updates Master/SubMaster record |
/partial-update/activate/:id | Turn on/off isActive field based on body data |
/partial-update/default/:id | Turn on/off isDefault field based on body data |
/partial-update/web-visible/:id | Turn on/off isWebVisible field based on body data |
/partial-update/sequence/:id | Sets sequence of record with :id , and updates affected records sequence |
/delete | Delete the record whose id send in body |
i18n
code for messages
Nextjs i18n package adds facility for internationalization in nodejs application, and it's used in following mannerr
req?.i18n?.(CODE)
(master/submaster).create | When record is created |
(master/submaster).update | When record is updated |
(master/submaster).activate | When isActive is set to true |
(master/submaster).deactivate | When isActive is set to false |
(master/submaster).display | When isWebVisible is set to true |
(master/submaster).notDisplay | When isWebVisible is set to false |
(master/submaster).default | When isDefault is set to true |
(master/submaster).notDefault | When isDefault is set to false |
submaster.seq | When sequence is updated |
(master/submaster).delete | When delete is performed |
(master/submaster).findAll | When all data is fetched |
(master/submaster).notFound | When Master/Submaster data is not found |
descriptor
codes
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 |
- You can prefix descriptors by adding
MASTERS_DESCRIPTOR_PREFIX
in environment variables.
(back to top)
Usecases
@knovator/masters
is combination of two packages @knovator/masters-admin
and @knovator/masters-admin
. It is designed plug and play masters module in your project. It is useful in following cases:
- Your app needs master, submaster facility to build things like
state
with city
, experiences
with skills
, categories
with subcategories
etc.
- You want to let admin manage masters and submasters data from admin panel.
- You want to show masters and submasters data somewhere in your app.
If you have any other usecase, please open an issue with tag usecase
. We will try to add it in our roadmap.
(back to top)
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
)
- Commit your Changes (
git commit -m 'Add some AmazingFeature'
)
- Push to the Branch (
git push origin feature/AmazingFeature
)
- Open a Pull Request
(back to top)
License
Distributed under the MIT License. See LICENSE.txt
for more information.
(back to top)
Contact
Knovator Technologies
Project Link: https://github.com/knovator/masters-node
(back to top)