forest-express
Version:
Official package for all Forest Express Lianas
50 lines (49 loc) • 2.67 kB
JavaScript
;
var _ = require('lodash');
var IntegrationInformationsGetter = require('./services/integration-informations-getter');
var AttributesGetter = require('./services/attributes-getter');
var serializeAttributes = require('./serializers/intercom-attributes');
var ConversationsGetter = require('./services/conversations-getter');
var serializeConversations = require('./serializers/intercom-conversations');
var ConversationGetter = require('./services/conversation-getter');
var serializeConversation = require('./serializers/intercom-conversation');
var path = require('../../services/path');
var auth = require('../../services/auth');
module.exports = function Routes(app, model, Implementation, options) {
var _this = this;
var modelName = Implementation.getModelName(model);
var integrationInfo;
if (options.integrations && options.integrations.intercom) {
integrationInfo = new IntegrationInformationsGetter(modelName, Implementation, options.integrations.intercom).perform();
}
this.getAttributes = function (request, response, next) {
new AttributesGetter(Implementation, _.extend(request.query, request.params), options, integrationInfo).perform().then(function (attributes) {
return serializeAttributes(attributes, modelName);
}).then(function (attributes) {
response.send(attributes);
})["catch"](next);
};
this.listConversations = function (request, response, next) {
new ConversationsGetter(Implementation, _.extend(request.query, request.params), options, integrationInfo).perform().spread(function (count, conversations) {
return serializeConversations(conversations, modelName, {
count: count
});
}).then(function (conversations) {
response.send(conversations);
})["catch"](next);
};
this.getConversation = function (request, response, next) {
new ConversationGetter(Implementation, _.extend(request.query, request.params), options).perform().then(function (conversation) {
return serializeConversation(conversation, modelName);
}).then(function (conversation) {
response.send(conversation);
})["catch"](next);
};
this.perform = function () {
if (integrationInfo) {
app.get(path.generate("".concat(modelName, "/:recordId/intercom_attributes"), options), auth.ensureAuthenticated, _this.getAttributes);
app.get(path.generate("".concat(modelName, "/:recordId/intercom_conversations"), options), auth.ensureAuthenticated, _this.listConversations);
app.get(path.generate("".concat(modelName, "_intercom_conversations/:conversationId"), options), auth.ensureAuthenticated, _this.getConversation);
}
};
};