2.3.0 • Published 5 months ago

@knovator/masters-node v2.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

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.

Built With

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,

    // db.js
    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,

    // fileRoute.js
    const express = require('express');
    const router = express.Router();
    
    router.post(`/files/upload`, (req, res) => {
        // TO DO: some file storage operation
        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) => {
        // TO DO: some file remove operation
        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

  1. Install library
    npm install @knovator/masters-node
    # or
    yarn add @knovator/masters-node

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
    • Provides ability to add authentication to routes
      // default
      (_req, _res, next) => {
        return next();
      }
  • logger
    • Provides ability to add logging for Database and Validation
      // default
      console
  • catchAsync
    • Wraps functions to handle async errors
      // default
      function catchAsync(fn) {
        return function (req, res, next) {
          Promise.resolve(fn(req, res, next)).catch((err) => {
            // this.logger.error(err.message);
            res.status(internalServerError).json({
              code: RESPONSE_CODE.ERROR,
              message: err.message,
              data: {},
            });
          });
        };
      }

Routes Infomration

Response follows following structure

{
  code: RESPONSE_CODES,
  message: "" // if internationalized is applied
  data: {}
}

Response Codes

CodeDescription
SUCCESSWhen request fullfiled without error
ERRORWhen request fullfiled with error

Custom Validation messages

MessageDescription
Master existsWhen master/submaster with same code is exist in database

HTTP Status Codes

HTTPDescription
200When request fullfiled without error
201When document is created
500When internal server occurred
422When Validation error occurred

Routes

RouteDescription
/createCreates Master/SubMaster record
/update:idUpdates Master/SubMaster record
/partial-update/activate/:idTurn on/off isActive field based on body data
/partial-update/default/:idTurn on/off isDefault field based on body data
/partial-update/web-visible/:idTurn on/off isWebVisible field based on body data
/partial-update/sequence/:idSets sequence of record with :id, and updates affected records sequence
/deleteDelete 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

// usage
req?.i18n?.(CODE)
CODEDescription
(master/submaster).createWhen record is created
(master/submaster).updateWhen record is updated
(master/submaster).activateWhen isActive is set to true
(master/submaster).deactivateWhen isActive is set to false
(master/submaster).displayWhen isWebVisible is set to true
(master/submaster).notDisplayWhen isWebVisible is set to false
(master/submaster).defaultWhen isDefault is set to true
(master/submaster).notDefaultWhen isDefault is set to false
submaster.seqWhen sequence is updated
(master/submaster).deleteWhen delete is performed
(master/submaster).findAllWhen all data is fetched
(master/submaster).notFoundWhen Master/Submaster data is not found

descriptor codes

CodeDescription
master.createFor Create API
master.updateFor Update API
master.activeFor isActive toggle API
master.defaultFor isDefault toggle API
master.webVisibleFor isWebVisible toggle API
master.sequenceFor sequence update API
master.softDeleteFor Soft-Delete API
master.listFor List API
  • You can prefix descriptors by adding MASTERS_DESCRIPTOR_PREFIX in environment variables.

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.

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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE.txt for more information.

Contact

Knovator Technologies

Project Link: https://github.com/knovator/masters-node

2.3.0

5 months ago

2.2.1

6 months ago

2.2.0

6 months ago

2.2.2

5 months ago

2.1.2

1 year ago

2.1.1

1 year ago

2.1.4

1 year ago

2.1.3

1 year ago

2.1.5

1 year ago

2.1.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.3.7

2 years ago

1.3.6

2 years ago

1.3.5

2 years ago

1.3.4

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.2.0

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago