forest-express
Version:
Official package for all Forest Express Lianas
86 lines (85 loc) • 3.8 kB
JavaScript
;
var _require = require('@forestadmin/context'),
inject = _require.inject;
var _ = require('lodash');
var auth = require('../../services/auth');
var path = require('../../services/path');
var IntegrationInformationsGetter = require('../../services/integration-informations-getter');
var CloseioLeadGetter = require('./services/closeio-lead-getter');
var CloseioLeadEmailsGetter = require('./services/closeio-lead-emails-getter');
var CloseioLeadEmailGetter = require('./services/closeio-lead-email-getter');
var CloseioCustomerLeadGetter = require('./services/closeio-customer-lead-getter');
var CloseioLeadCreator = require('./services/closeio-lead-creator');
var serializeCloseioLeads = require('./serializers/closeio-leads');
var serializeCloseioLeadEmails = require('./serializers/closeio-lead-emails');
module.exports = function Routes(app, model, Implementation, opts) {
var _inject = inject(),
modelsManager = _inject.modelsManager;
var modelName = Implementation.getModelName(model);
var integrationInfo;
if (opts.integrations && opts.integrations.closeio) {
integrationInfo = new IntegrationInformationsGetter(modelName, Implementation, opts.integrations.closeio).perform();
}
if (integrationInfo) {
var integrationValues = integrationInfo.split('.');
integrationInfo = {
collection: modelsManager.getModels()[integrationValues[0]],
field: integrationValues[1]
};
}
function closeioLead(req, res, next) {
new CloseioLeadGetter(Implementation, _.extend(req.query, req.params), opts).perform().then(function (lead) {
return serializeCloseioLeads(lead, modelName);
}).then(function (lead) {
res.send(lead);
}, next);
}
function closeioLeadEmails(req, res, next) {
new CloseioLeadEmailsGetter(Implementation, _.extend(req.query, req.params), opts).perform().then(function (results) {
var count = results[0];
var emails = results[1];
return serializeCloseioLeadEmails(emails, modelName, {
count: count
});
}).then(function (emails) {
res.send(emails);
}, next);
}
function customerLead(request, response) {
new CloseioCustomerLeadGetter(Implementation, _.extend(request.query, request.params), opts, integrationInfo).perform().then(function (lead) {
if (!lead) {
throw new Error('not_found');
}
return serializeCloseioLeads(lead, modelName);
}).then(function (lead) {
response.send(lead);
})["catch"](function () {
response.send({
meta: {}
});
});
}
function closeioLeadEmail(req, res, next) {
new CloseioLeadEmailGetter(Implementation, _.extend(req.query, req.params), opts).perform().then(function (email) {
return serializeCloseioLeadEmails(email, modelName);
}).then(function (email) {
res.send(email);
}, next);
}
function createCloseioLead(req, res, next) {
new CloseioLeadCreator(Implementation, req.body, opts).perform().then(function () {
res.send({
msg: 'Close.io lead successfuly created.'
});
}, next);
}
this.perform = function () {
if (integrationInfo) {
app.get(path.generate("".concat(modelName, "_closeio_leads/:leadId"), opts), auth.ensureAuthenticated, closeioLead);
app.get(path.generate("".concat(modelName, "_closeio_leads/:leadId/emails"), opts), auth.ensureAuthenticated, closeioLeadEmails);
app.get(path.generate("".concat(modelName, "_closeio_emails/:emailId"), opts), auth.ensureAuthenticated, closeioLeadEmail);
app.get(path.generate("".concat(modelName, "/:recordId/lead"), opts), auth.ensureAuthenticated, customerLead);
app.post(path.generate("".concat(modelName, "_closeio_leads"), opts), auth.ensureAuthenticated, createCloseioLead);
}
};
};