UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

102 lines (101 loc) 3.65 kB
"use strict"; var _require = require('@forestadmin/context'), inject = _require.inject; var _ = require('lodash'); var logger = require('../../services/logger'); var Setup = require('./setup'); var Routes = require('./routes'); function Checker(options, Implementation) { var _inject = inject(), modelsManager = _inject.modelsManager; var integrationValid = false; function hasIntegration() { return options.integrations && options.integrations.mixpanel; } function isProperlyIntegrated() { return options.integrations.mixpanel.apiKey && options.integrations.mixpanel.apiSecret && options.integrations.mixpanel.mapping && options.integrations.mixpanel.mixpanel; } function isMappingValid() { var models = modelsManager.getModels(); var mappingValid = true; _.map(options.integrations.mixpanel.mapping, function (mappingValue) { var collectionName = mappingValue.split('.')[0]; if (!models[collectionName]) { mappingValid = false; } }); if (!mappingValid) { logger.error("Cannot find some Mixpanel integration mapping values (".concat(options.integrations.mixpanel.mapping, ") among the project models:\n").concat(_.keys(models).join(', '))); } return mappingValid; } function stringToArray(value) { return _.isString(value) ? [value] : value; } function integrationCollectionMatch(integration, model) { if (!integrationValid) { return false; } var models = modelsManager.getModels(); var collectionModelNames = _.map(integration.mapping, function (mappingValue) { var collectionName = mappingValue.split('.')[0]; if (models[collectionName]) { return Implementation.getModelName(models[collectionName]); } return null; }); return collectionModelNames.indexOf(Implementation.getModelName(model)) > -1; } if (hasIntegration()) { if (isProperlyIntegrated()) { options.integrations.mixpanel.mapping = stringToArray(options.integrations.mixpanel.mapping); integrationValid = isMappingValid(); } else { logger.error('Cannot setup properly your Mixpanel integration.'); } } this.defineRoutes = function (app, model) { if (!integrationValid) { return; } if (integrationCollectionMatch(options.integrations.mixpanel, model)) { new Routes(app, model, Implementation, options).perform(); } }; this.defineCollections = function (collections) { if (!integrationValid) { return; } _.each(options.integrations.mixpanel.mapping, function (collectionAndFieldName) { Setup.createCollections(Implementation, collections, collectionAndFieldName, options); }); }; this.defineFields = function (model, schema) { if (!integrationValid) { return; } if (integrationCollectionMatch(options.integrations.mixpanel, model)) { Setup.createFields(Implementation, model, schema.fields); } }; this.defineSerializationOption = function (model, schema, dest, field) { if (integrationValid && field.integration === 'mixpanel') { dest[field.field] = { ref: 'id', attributes: [], included: false, nullIfMissing: true, // TODO: This option in the JSONAPISerializer is weird. ignoreRelationshipData: true, relationshipLinks: { related: function related(dataSet) { return { href: "/forest/".concat(Implementation.getModelName(model), "/").concat(dataSet[schema.idField], "/relationships/").concat(field.field) }; } } }; } }; } module.exports = Checker;