'use strict'; const FindIndex = require('lodash.findindex'); module.exports = ({ deploymentGroups = [], services = [], instances = [] }) => { const getInstances = (serviceId) => { return (opts, cb) => { cb(null, instances .filter((instance) => { return instance.serviceId === serviceId; }) ); }; }; const getServices = (deploymentGroupId) => { return (opts, cb) => { cb(null, services .filter((service) => { return service.deploymentGroupId === deploymentGroupId; }) .map((service) => { return Object.assign({}, service, { instances: getInstances(service.id) }); }) ); }; }; const getDeploymentGroups = (opts, cb) => { cb(null, deploymentGroups .map((dg) => { return Object.assign({}, dg, { services: getServices(dg.id) }); }) ); }; const getPortal = (opts, cb) => { cb(null, { deploymentGroups: getDeploymentGroups }); }; const updateInstance = (instance, cb) => { const instanceIndex = FindIndex(instances, ['id', instance.id]); const updatedInstance = Object.assign( {}, instances[instanceIndex], instance ); instances[instanceIndex] = updatedInstance; return updatedInstance; }; const updateService = (service, cb) => { const serviceIndex = FindIndex(service, ['id', service.id]); const updatedService = Object.assign({}, services[serviceIndex], service); services[serviceIndex] = updatedService; return updatedService; }; return { getPortal, updateInstance, updateService }; };