|
|
|
@ -1,19 +1,59 @@
|
|
|
|
|
import Serializer from 'ember-data/serializers/rest';
|
|
|
|
|
|
|
|
|
|
import { get } from '@ember/object';
|
|
|
|
|
import {
|
|
|
|
|
HEADERS_SYMBOL as HTTP_HEADERS_SYMBOL,
|
|
|
|
|
HEADERS_INDEX as HTTP_HEADERS_INDEX,
|
|
|
|
|
HEADERS_DIGEST as HTTP_HEADERS_DIGEST,
|
|
|
|
|
} from 'consul-ui/utils/http/consul';
|
|
|
|
|
export default Serializer.extend({
|
|
|
|
|
// this could get confusing if you tried to override
|
|
|
|
|
// say `normalizeQueryResponse`
|
|
|
|
|
// TODO: consider creating a method for each one of the `normalize...Response` family
|
|
|
|
|
normalizeResponse: function(store, primaryModelClass, payload, id, requestType) {
|
|
|
|
|
return this._super(
|
|
|
|
|
// Pick the meta/headers back off the payload and cleanup
|
|
|
|
|
// before we go through serializing
|
|
|
|
|
const headers = payload[HTTP_HEADERS_SYMBOL] || {};
|
|
|
|
|
delete payload[HTTP_HEADERS_SYMBOL];
|
|
|
|
|
const normalizedPayload = this.normalizePayload(payload, id, requestType);
|
|
|
|
|
const response = this._super(
|
|
|
|
|
store,
|
|
|
|
|
primaryModelClass,
|
|
|
|
|
{
|
|
|
|
|
[primaryModelClass.modelName]: this.normalizePayload(payload, id, requestType),
|
|
|
|
|
[primaryModelClass.modelName]: normalizedPayload,
|
|
|
|
|
},
|
|
|
|
|
id,
|
|
|
|
|
requestType
|
|
|
|
|
);
|
|
|
|
|
// put the meta onto the response, here this is ok
|
|
|
|
|
// as JSON-API allows this and our specific data is now in
|
|
|
|
|
// response[primaryModelClass.modelName]
|
|
|
|
|
// so we aren't in danger of overwriting anything
|
|
|
|
|
// (which was the reason for the Symbol-like property earlier)
|
|
|
|
|
// use a method modelled on ember-data methods so we have the opportunity to
|
|
|
|
|
// do this on a per-model level
|
|
|
|
|
response.meta = this.normalizeMeta(
|
|
|
|
|
store,
|
|
|
|
|
primaryModelClass,
|
|
|
|
|
headers,
|
|
|
|
|
normalizedPayload,
|
|
|
|
|
id,
|
|
|
|
|
requestType
|
|
|
|
|
);
|
|
|
|
|
return response;
|
|
|
|
|
},
|
|
|
|
|
normalizeMeta: function(store, primaryModelClass, headers, payload, id, requestType) {
|
|
|
|
|
const meta = {
|
|
|
|
|
index: headers[HTTP_HEADERS_INDEX],
|
|
|
|
|
digest: headers[HTTP_HEADERS_DIGEST],
|
|
|
|
|
date: headers['date'],
|
|
|
|
|
};
|
|
|
|
|
if (requestType === 'query') {
|
|
|
|
|
meta.ids = payload.map(item => {
|
|
|
|
|
return get(item, this.primaryKey);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return meta;
|
|
|
|
|
},
|
|
|
|
|
normalizePayload: function(payload, id, requestType) {
|
|
|
|
|
return payload;
|
|
|
|
|