UNPKG

gbox-apis

Version:

An Gbox API's npm Package for Node.js and Sails.js

141 lines (109 loc) 4.46 kB
let dbConfig = {}, routes = {}, controllerActions = {}; const Helper = require('./Helper'); const path = require('path'); let packageJson = null if(typeof sails == "object" ) { packageJson = require(path.join(process.cwd(), 'package.json')); } else { let Helpers = use('Helpers') packageJson =require(`${Helpers.appRoot()}/package.json`); } /** * Check-in GaussBox API to MasterAPI, and make it accessible to all GaussBox API's * * @returns {API} */ async function checkIn(apiRoutes) { routes = apiRoutes; // save routes globally const Api = require('./Api')(dbConfig); if (!packageJson) throw new Error('***** Error: Missing package.json file! *****'); let valPackageJson = Helper.validatePackageJson(packageJson); // validate package.json file if (!valPackageJson.valid) { console.log('\x1b[31m', `[GB ERROR] ${valPackageJson.errorMsg}`, '\x1b[0m'); // log error throw new Error(valPackageJson.errorMsg); } let valRoutes = Helper.validateRoutes(routes); // validate routes json if (!valRoutes.valid) { console.log('\x1b[31m', `[GB ERROR] ${valRoutes.errorMsg}`, '\x1b[0m'); // log error throw new Error(valRoutes.errorMsg); } let exist = await Api.getApi(packageJson.name); // check if API exist // if not exist, added it if (!exist.length) { try { let apiId = await Api.saveApi(); let apiModuleId = await Api.saveApiModule(apiId); await Api.saveApiActions(routes, apiId, apiModuleId); } catch (e) { console.log('\x1b[31m', '[GB ERROR] Problem with saving api data.', e, '\x1b[0m'); // log error throw new Error(e); } } else { try { let oldApi = (await Api.getApi(packageJson.name))[0]; // get existing api data await Api.updateApi(oldApi); // update api model // handle route actions let actions = { new: [], update: [], remove: [] }; if (oldApi.actions.length) { // check for routes which need to be removed or updated for (let existAction of oldApi.actions) { let check = routes.find(apiAction => { if (apiAction.route === existAction.route && apiAction.routeMethod === existAction.method) return apiAction; }); if (!check) actions.remove.push(existAction); else actions.update.push(check); } // check for new routes for (let route of routes) { let check = oldApi.actions.find(action => { if (action.route === route.route && action.method === route.routeMethod) return action; }); if (!check) actions.new.push(route); } } if (actions.new.length) await Api.saveApiActions(actions.new, oldApi.id, oldApi.module.id); // save new actions if (actions.update.length) await Api.updateApiActions(actions.update); // update actions if (actions.remove.length) await Api.removeApiActions(actions.remove); // remove unused actions } catch (e) { console.log('\x1b[31m', '[GB ERROR] Problem with updating api data.', e, '\x1b[0m'); // log error throw new Error(e); } } return 'API checked in successfully!'; } /** * Get Gauss Box API data * * @returns {API} */ async function getData(apiName = null) { const Api = require('./Api')(dbConfig); let data; try { data = await Api.getApi(apiName); if (!data.length) { console.log('\x1b[31m', `[GB ERROR] ${apiName} is unknown API!`, '\x1b[0m'); // log error throw new Error('Unknown API!'); } return data; } catch (e) { console.log('\x1b[31m', '[GB ERROR] Error getting apiData!', e, '\x1b[0m'); // log error throw new Error(e); } }; // managing Gauss Box API'S module.exports = (config) => { dbConfig = { host: config.host, port: config.port, user: config.user, password: config.password, database: config.database }; return { checkIn: checkIn, getData: getData } };