'use strict'; const modemList = { by_name: {}, by_imsi: {}, by_msisdn: {}, }; /** * Objek data sebuah modem. * * @typedef {Object} ModemData * @property {string} name - nama modem * @property {string} imsi - IMSI modem * @property {string} msisdn - MSISDN modem * @property {string} reportIp - IP modem * @property {number} reportPort - TCP port modem * @property {string} reportApikey - APIKEY modem * @property {string} reportPathSms - url path untuk pengiriman SMS */ /** * Update data sebuah modem berdasarkan nama modem. * * @param {ModemData} val - objek data modem */ function touchByName(val) { if (!val || !val.name) return; if (typeof val.name !== 'string') return; if (!val.name.trim()) return; modemList.by_name[val.name] = val; } /** * Update data sebuah modem berdasarkan IMSI. * * @param {ModemData} val - objek data modem */ function touchByIMSI(val) { if (!val || !val.imsi) return; if (typeof val.imsi !== 'string') return; if (!val.imsi.trim()) return; modemList.by_imsi[val.imsi] = val; } /** * Update data sebuah modem berdasarkan MSISDN. * * @param {ModemData} val - objek data modem */ function touchByMSISDN(val) { if (!val || !val.msisdn) return; if (typeof val.msisdn !== 'string') return; if (!val.msisdn.trim()) return; modemList.by_msisdn[val.msisdn] = val; } /** * Update data sebuah modem. * * @param {ModemData} val - objek data modem * @see ModemData */ function touch(val) { if (!val) return; if (!val.reportIp) { val.reportIp = '127.0.0.1'; } touchByName(val); touchByIMSI(val); touchByMSISDN(val); } /** * Ambil data sebuah modem. * * @param {string} selector - selector pencarian, valid jika bernilai salah satu dari: name, imsi, msisdn * @param {string} keyword - kata kunci modem yang ingin diambil * @returns {ModemData} data modem terkait */ function get(selector, keyword) { if (!selector || !keyword) return null; return modemList[`by_${selector}`] ? modemList[`by_${selector}`][keyword] : null; } exports.touch = touch; exports.set = touch; exports.get = get;