JSPM

report-developer-server

1.0.7
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 14
    • Score
      100M100P100Q50777F
    • License ISC

    This is report developer's server side package

    Package Exports

    • report-developer-server
    • report-developer-server/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (report-developer-server) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    Report Developer Server

    Report Developer Server is a report developer's server side package that facilitates database operations for report development and management.

    Features

    • Database Connection: Establish a connection to a database by providing credentials.
    • Save Reports: Save new report in the connected database.
    • Retrieve Reports: Retrieve all saved reports from the connected database.
    • Report Development: Execute custom queries for report development purposes.

    Installation

    To install the package, use npm:

    npm i report-developer-server

    Usage

    import Express from "express";
    import dotenv from "dotenv";
    
    // import all 4 methods provided by the report-developer-server
    import {
      connect,
      reportDeveloper,
      saveReport,
      getReports,
    } from "report-developer-server";
    
    const app = Express();
    app.use(Express.json());
    dotenv.config();
    
    // create dbCredentials a object of database credentials with host, port, user, password, and database feilds
    // all the feilds of dbCredentials are required
    const dbCredentials = {
      host: process.env.DB_HOST,
      port: process.env.DB_PORT,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
    };
    
    // use try/catch inorder to catch the error and handle it
    try {
      // 1) CONNECT : establishes connection with your database and creates a new ReportBuilder table if it doesn't exist inorder to save your reports
      // parameters: 1) dbCredentials [object] - used to create connection to your database
      //             2) logs [boolean] - pass 'true' if you want success and error logs (recommended during development)
      //                               - by default the value is 'false' so don't pass anything if you don't want the logs (recommended during production)
      connect(dbCredentials, true);
    } catch (error) {
      // log the error in case when an error occurs
      console.error(error);
    }
    
    // create a POST route to handle POST requests to '/reportDeveloper'
    // this endpoint is responsible to take the 'query' from the client, build the report by passing the 'query' to 'reportDeveloper()' and return a response with the obtained data from 'reportDeveloper()' to the client
    app.post("/reportDeveloper", async (req, res) => {
      // destructure 'query' from the request body
      const { query } = req.body;
    
      // check if the 'query' parameter is missing
      if (!query) {
        // return a 400 Bad Request response if 'query' is not provided
        return res.status(400).json({ error: "Query parameter is missing" });
      }
    
      try {
        // 2) REPORT DEVELOPER: executes the 'query' on your database and returns the data
        // parameters: 1) query [String] - sqlQuery to be executed on your database to create your desired report
        const response = await reportDeveloper(query);
    
        // return a 200 OK response with the obtained data from 'reportDeveloper()'
        return res
          .status(200)
          .json({ data: response.data, error: null, status: response.status });
      } catch (error) {
        // if an error occurs during 'reportDeveloper()' execution, handle it here
        // return a 500 Internal Server Error response with the error message
        return res.status(500).json({ error: error.message });
      }
    });
    
    // create a POST route to handle POST requests to '/saveReport'
    // this endpoint is responsible to take 'name' and 'query' from the client, pass them to 'saveReport()' which then saves the report in the 'reportBuilder' table on your database and return a success or error response to the client
    app.post("/saveReport", async (req, res) => {
      // destructure 'name' and 'query' from the request body
      const { name, query } = req.body;
    
      // check if the 'name' or 'query' parameters are missing
      if (!name || !query) {
        // return a 400 Bad Request response with an error message if parameters are missing
        return res.status(400).json({ error: "Report parameters are missing" });
      }
    
      try {
        // 3) SAVE REPORT: saves your report in the 'reportBuilder' table on your database
        // parameters: 1) name [String] - name of your report
        //             2) query [String] - sqlQuery of your report
        const response = await saveReport({ name, query });
    
        // return a successful 200 OK response with the saved report data
        return res
          .status(200)
          .json({ data: response.data, error: null, status: response.status });
      } catch (error) {
        // handle any errors that occurred during the attempt to save the report
        // return a 500 Internal Server Error response with the error message
        return res.status(500).json({ error: error.message });
      }
    });
    
    // create a GET route to handle GET requests to '/savedReports'
    // this endpoint is responsible to fetch all the saved reports from the 'reportBuilder' table on your database and return a response with the obtained reports to the client
    app.get("/savedReports", async (req, res) => {
      try {
        // 4) SAVED REPORTS: fetches all the saved reports from 'reportDeveloper' table on your database and return a response with the obtained reports
        const response = await getReports();
    
        // return a successful 200 OK response with the obtained reports
        return res
          .status(200)
          .json({ data: response.data, error: null, status: response.status });
      } catch (error) {
        // handle any errors that occurred during the attempt to retrieve reports
        // return a 500 Internal Server Error response with the error message
        return res.status(500).json({ error: error.message });
      }
    });
    
    const PORT = process.env.PORT || 3000;
    app.listen(PORT, function () {
      console.log(`Server running on port ${PORT} `);
    });