| /** |
| * Copyright (c) HashiCorp, Inc. |
| * SPDX-License-Identifier: MPL-2.0 |
| */ |
| |
| import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest'; |
| import { assign } from '@ember/polyfills'; |
| import { decamelize } from '@ember/string'; |
| import IdentityManager from '../utils/identity-manager'; |
| |
| const uuids = new IdentityManager(); |
| |
| export default RESTSerializer.extend(EmbeddedRecordsMixin, { |
| keyForAttribute: function (attr) { |
| return decamelize(attr); |
| }, |
| |
| attrs: { |
| nodes: { embedded: 'always' }, |
| dr: { embedded: 'always' }, |
| performance: { embedded: 'always' }, |
| }, |
| |
| setReplicationId(data) { |
| if (data) { |
| data.id = data.cluster_id || uuids.fetch(); |
| } |
| }, |
| |
| normalize(modelClass, data) { |
| // embedded records need a unique value to be stored |
| // set id for dr and performance to cluster_id or random unique id |
| this.setReplicationId(data.dr); |
| this.setReplicationId(data.performance); |
| return this._super(modelClass, data); |
| }, |
| |
| pushPayload(store, payload) { |
| const transformedPayload = this.normalizeResponse( |
| store, |
| store.modelFor('cluster'), |
| payload, |
| null, |
| 'findAll' |
| ); |
| return store.push(transformedPayload); |
| }, |
| |
| normalizeResponse(store, primaryModelClass, payload, id, requestType) { |
| // FIXME when multiple clusters lands |
| const transformedPayload = { |
| clusters: assign({ id: '1' }, payload.data || payload), |
| }; |
| |
| return this._super(store, primaryModelClass, transformedPayload, id, requestType); |
| }, |
| }); |