import Serializer from './application'; import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/service'; import { get } from '@ember/object'; export default Serializer.extend({ primaryKey: PRIMARY_KEY, slugKey: SLUG_KEY, respondForQuery: function(respond, query) { return this._super( cb => respond((headers, body) => { // Services and proxies all come together in the same list // Here we map the proxies to their related services on a Service.Proxy // property for easy access later on const services = {}; body .filter(function(item) { return item.Kind !== 'connect-proxy'; }) .forEach(item => { services[item.Name] = item; }); body .filter(function(item) { return item.Kind === 'connect-proxy'; }) .forEach(item => { // Iterating to cover the usecase of a proxy being // used by more than one service if (item.ProxyFor) { item.ProxyFor.forEach(service => { if (typeof services[service] !== 'undefined') { services[service].Proxy = item; } }); } }); return cb(headers, body); }), query ); }, respondForQueryRecord: function(respond, query) { // Name is added here from the query, which is used to make the uid // Datacenter gets added in the ApplicationSerializer return this._super( cb => respond((headers, body) => { return cb(headers, { Name: query.id, Namespace: get(body, 'firstObject.Service.Namespace'), Nodes: body, }); }), query ); }, });