UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

101 lines (100 loc) 3.4 kB
"use strict"; var _require = require('@forestadmin/context'), inject = _require.inject; var _ = require('lodash'); var logger = require('../../services/logger'); var Routes = require('./routes'); var Setup = require('./setup'); function Checker(opts, Implementation) { var _inject = inject(), modelsManager = _inject.modelsManager; var integrationValid = false; function hasIntegration() { return opts.integrations && opts.integrations.layer; } function isProperlyIntegrated() { return opts.integrations.layer.serverApiToken && opts.integrations.layer.appId; } function isMappingValid() { var models = modelsManager.getModels(); var mappingValid = true; _.map(opts.integrations.layer.mapping, function (mappingValue) { var collectionName = mappingValue.split('.')[0]; if (!models[collectionName]) { mappingValid = false; } }); if (!mappingValid) { logger.error("Cannot find some Layer integration mapping values (".concat(opts.integrations.layer.mapping, ") among the project models:\n").concat(_.keys(models).join(', '))); } return mappingValid; } function castToArray(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()) { opts.integrations.layer.mapping = castToArray(opts.integrations.layer.mapping); integrationValid = isMappingValid(); } else { logger.error('Cannot setup properly your Layer integration.'); } } this.defineRoutes = function (app, model) { if (!integrationValid) { return; } if (integrationCollectionMatch(opts.integrations.layer, model)) { new Routes(app, model, Implementation, opts).perform(); } }; this.defineCollections = function (collections) { if (!integrationValid) { return; } _.each(opts.integrations.layer.mapping, function (collectionAndFieldName) { Setup.createCollections(Implementation, collections, collectionAndFieldName); }); }; this.defineFields = function (model, schema) { if (!integrationValid) { return; } if (integrationCollectionMatch(opts.integrations.layer, model)) { Setup.createFields(Implementation, model, schema.fields); } }; this.defineSerializationOption = function (model, schema, dest, field) { if (integrationValid && field.integration === 'layer') { dest[field.field] = { ref: 'id', attributes: [], included: false, nullIfMissing: true, ignoreRelationshipData: true, relationshipLinks: { related: function related(dataSet) { return { href: "/forest/".concat(Implementation.getModelName(model), "/").concat(dataSet[schema.idField], "/").concat(field.field) }; } } }; } }; } module.exports = Checker;