const CoreClass = require("../core.js"); const async = require("async"); const crypto = require("crypto"); class APIModule extends CoreClass { constructor() { super("api"); } initialize() { return new Promise((resolve, reject) => { this.app = this.moduleManager.modules["app"]; this.stations = this.moduleManager.modules["stations"]; this.db = this.moduleManager.modules["db"]; this.cache = this.moduleManager.modules["cache"]; this.notifications = this.moduleManager.modules["notifications"]; const actions = require("./actions"); this.app.runJob("GET_APP", {}) .then((response) => { response.app.get("/", (req, res) => { res.json({ status: "success", message: "Coming Soon", }); }); // response.app.get("/debug_station", async (req, res) => { // const responseObject = {}; // const stationModel = await this.db.runJob( // "GET_MODEL", // { // modelName: "station", // } // ); // async.waterfall([ // next => { // stationModel.find({}, next); // }, // (stations, next) => { // responseObject.mongo = { // stations // }; // next(); // }, // next => { // this.cache // .runJob("HGETALL", { table: "stations" }) // .then(stations => { // next(null, stations); // }) // .catch(next); // }, // (stations, next) => { // responseObject.redis = { // stations // }; // next(); // }, // next => { // responseObject.cryptoExamples = {}; // responseObject.mongo.stations.forEach(station => { // const payloadName = `stations.nextSong?id=${station._id}`; // responseObject.cryptoExamples[station._id] = crypto // .createHash("md5") // .update(`_notification:${payloadName}_`) // .digest("hex") // }); // next(); // }, // next => { // this.notifications.pub.keys("*", next); // }, // (redisKeys, next) => { // responseObject.redis = { // ...redisKeys, // ttl: {} // }; // async.eachLimit(redisKeys, 1, (redisKey, next) => { // this.notifications.pub.ttl(redisKey, (err, ttl) => { // responseObject.redis.ttl[redisKey] = ttl; // next(err); // }) // }, next); // }, // next => { // responseObject.debugLogs = this.moduleManager.debugLogs.stationIssue; // next(); // }, // next => { // responseObject.debugJobs = this.moduleManager.debugJobs; // next(); // } // ], (err, response) => { // if (err) { // console.log(err); // return res.json({ // error: err, // objectSoFar: responseObject // }); // } // res.json(responseObject); // }); // }); // Object.keys(actions).forEach(namespace => { // Object.keys(actions[namespace]).forEach(action => { // let name = `/${namespace}/${action}`; // response.app.get(name, (req, res) => { // actions[namespace][action](null, result => { // if (typeof cb === "function") // return res.json(result); // }); // }); // }); // }); resolve(); }) .catch((err) => { reject(err); }); }); } } module.exports = new APIModule();