asksuite-core
Version:
423 lines (388 loc) • 11.4 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.findConversationsByConversationId = function (conversationId) {
return new Promise(function (resolve, reject) {
request.get(
{
url:
config.INFOCHAT_DATA_SERVER +
'/conversations/' +
conversationId +
'/findByConversationId',
json: true,
headers: {
Authorization: config.USER_TOKEN,
},
},
function (err, httpResponse, body) {
if (!err) {
checkStatus(httpResponse, body, resolve, reject);
} else {
console.log('erro ao buscar conversations');
reject(err);
}
},
);
});
};
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,
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.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/finishGroupConversation/' + 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.setConversationUnavailable = function (conversationId) {
return Util.executeRequestAndSaveOnError(
{
request: {
url: config.INFOCHAT_DATA_SERVER + '/conversation/setUnavailable',
method: 'POST',
headers: {
Authorization: config.USER_TOKEN,
},
json: {
conversationId,
},
},
type: 'conversations',
},
config,
)
.then(function (body) {
console.log(`Set unavailable ${conversationId}`);
return body;
})
.catch((err) => {
console.log(`Error setting conversation ${conversationId} unavailable`);
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);
}
});
};
requester.registerSatisfactionSurveyResponse = function ({
companyId,
conversationId,
satisfactionResponse,
isTest = false,
}) {
return new Promise((resolve, reject) => {
if (isTest) {
resolve('test chat');
} else {
request.post(
{
url:
config.INFOCHAT_DATA_SERVER +
`/conversation/satisfactionSurvey/${conversationId}/${companyId}`,
json: { satisfactionResponse },
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 requester;
};