diff --git a/lib/db-evo.js b/lib/db-evo.js new file mode 100644 index 0000000..a7c6268 --- /dev/null +++ b/lib/db-evo.js @@ -0,0 +1,47 @@ +const mysql = require('mysql'); + +const config = require('komodo-sdk/config'); + +exports.ERROR_POOL_NOT_READY = new Error('DB-EVO: pool is not ready'); + +exports.pool = config.mysql ? mysql.createPool({ + host: config.mysql.evo.host || 'localhost', + database: config.mysql.evo.database || 'komodo', + user: config.mysql.evo.user || 'komodo', + password: config.mysql.evo.password, +}) : null; + +exports.query = (query, values, cb) => { + // pool.query.apply(null, arguments); + if (!this.pool || !this.pool.query) { + if (typeof cb === 'function') { + cb(this.ERROR_POOL_NOT_READY); + } + + return; + } + + this.pool.query(query, values, cb); +}; + +exports.format = (sql, values, cb) => new Promise((resolve, reject) => { + if (!this.pool) { + reject(this.ERROR_POOL_NOT_READY); + if (typeof cb === 'function') cb(this.ERROR_POOL_NOT_READY); + return; + } + + this.pool.getConnection((err, connection) => { + if (err) { + reject(err); + if (typeof cb === 'function') cb(err); + return; + } + + const formatted = connection.format(sql, values); + connection.release(); + + resolve(formatted); + if (typeof cb === 'function') cb(null, formatted); + }); +}); diff --git a/lib/webservice/index.js b/lib/webservice/index.js index cdafe83..df0710d 100644 --- a/lib/webservice/index.js +++ b/lib/webservice/index.js @@ -10,8 +10,10 @@ const app = express(); const listenPort = config.webservice.port || config.webservice.listen_port; const routerPriceplan = require('./router/priceplan'); +const routerProduct = require('./router/product'); app.use('/apikey/:apikey/priceplan', routerPriceplan); +app.use('/apikey/:apikey/products', routerProduct); if (CLUSTER_MODE && cluster.isMaster) { logger.info(`Master ${process.pid} is running`); diff --git a/lib/webservice/router/product.js b/lib/webservice/router/product.js new file mode 100644 index 0000000..929f137 --- /dev/null +++ b/lib/webservice/router/product.js @@ -0,0 +1,30 @@ +const express = require('express'); +const logger = require('komodo-sdk/logger'); +const dbEvo = require('../../db-evo'); + +const router = express.Router(); +module.exports = router; + +function pageJson(req, res) { + const query = ` + SELECT + UPPER(service.keyword) AS name + FROM product + LEFT JOIN service ON service.svc_id = product.svc_id + WHERE + service.svc_cat IN (1, 6) + ORDER BY SOUNDEX(service.keyword), LENGTH(service.keyword), service.keyword; + `.trim(); + + dbEvo.query(query, [], (err, result) => { + if (err) { + logger.warn(`ROUTER-PRODUCTS: DB error. ${err.toString()}`); + } + + const products = (result || []).map((item) => item.name); + + res.json(products); + }); +} + +router.get('/json', pageJson);