UNPKG

asksuite-core

Version:
333 lines (301 loc) 8.95 kB
const Util = require('./util'); const request = require('request'); const mapCacheBookingEngine = new Map(); module.exports = function(config) { const bookingEngineCacheWrapper = Util.fallbackCacheFactory(mapCacheBookingEngine); const requester = {}; requester.fetchAndCacheBookingEngines = function() { console.log('listing booking engines'); return requester.listBookingEngines().then(bookingengines => { bookingengines.forEach(bookingEngine => { mapCacheBookingEngine.set(bookingEngine.type, bookingEngine); }); console.log('cached booking engines'); }); }; function checkStatus(res, body, resolve, reject) { if (res.statusCode >= 200 && res.statusCode < 300) { resolve(body); } else { reject(body); } } requester.list = function() { const promise = new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/chattrees', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { console.log('######################'); //console.log(body); checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.listCompanies = function() { const promise = new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/companies', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.listBookingEngines = function() { const promise = new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/bookingengines', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar motores'); reject(err); } }, ); }); return promise; }; requester.listLanguages = function() { return new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/languages', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar languages'); reject(err); } }, ); }); }; requester.findCompany = function(id) { const promise = new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/companies/' + id, json: true, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.findTree = function(id) { const promise = new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/chattrees/' + id, json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.findTreeByCompanyId = function(treeId) { const promise = new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/chattrees/' + treeId + '/findByCompanyId', json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); return promise; }; requester.listKeywordsExpressions = function() { return new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/keywordintents', json: true, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); }; requester.findBookingEngineByType = bookingEngineCacheWrapper(function(type) { return new Promise(function(resolve, reject) { request.get( { url: config.INFOCHAT_DATA_SERVER + '/bookingengines/findByType/' + type, json: true, headers: { Authorization: config.USER_TOKEN, }, }, function(err, httpResponse, body) { if (!err) { checkStatus(httpResponse, body, resolve, reject); } else { console.log('erro ao listar dados'); reject(err); } }, ); }); }); requester.finishConversation = function(conversationId) { return Util.executeRequestAndSaveOnError( { request: { url: config.INFOCHAT_DATA_SERVER + '/conversation/finishConversation/' + conversationId, headers: { Authorization: config.USER_TOKEN, }, }, type: 'conversations', }, config, ) .then(function(body) { console.log('finishedconversation'); return body; }) .catch(err => { console.log('erro ao realizar o finish'); throw err; }); }; requester.markRequestPrice = function(conversationId, isTest = false, companyId = null) { if (isTest) { return Promise.resolve(); } return Util.executeRequestAndSaveOnError( { request: { url: `${config.INFOCHAT_DATA_SERVER}/conversation/setRequestedPrice/${conversationId}/${companyId}`, method: 'POST', headers: { Authorization: config.USER_TOKEN, }, }, type: 'conversations', }, config, ) .then(function(body) { console.log('mark conversation request price', conversationId); return body; }) .catch(err => { console.log('erro ao realizar o mark conversation request price'); throw err; }); }; requester.registerQuote = function(searchData, isTest = false) { return new Promise((resolve, reject) => { const splittedCompanyId = searchData.companyId.split('.'); searchData.companyId = splittedCompanyId.length > 1 ? splittedCompanyId[1] : splittedCompanyId[0]; if (isTest) { resolve('test chat'); } else { const [arrivalDate, arrivalTime] = Util.getDateAndTimeFromDateISO(searchData.arrivalDate); const [departureDate, departureTime] = Util.getDateAndTimeFromDateISO( searchData.departureDate, ); searchData.arrivalTime = arrivalTime; searchData.arrivalDate = Util.appendTimeISOStringToDate(arrivalDate, '06'); searchData.departureTime = departureTime; searchData.departureDate = Util.appendTimeISOStringToDate(departureDate, '06'); if (searchData.searchResult) { searchData = Object.assign(searchData, Util.getPriceExtremes(searchData.searchResult)); } Util.executeRequestAndSaveOnError( { request: { url: config.INFOCHAT_DATA_SERVER + '/conversation/registerQuote', method: 'POST', json: searchData, headers: { Authorization: config.USER_TOKEN, }, }, type: 'quotes', }, config, ) .then(body => resolve(body)) .catch(reject); } }); }; return requester; };