asksuite-core
Version:
333 lines (301 loc) • 8.95 kB
JavaScript
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;
};