31577201d8
* Update dependency ember-cli-mirage to v3 * follow upgrade guide * fix test setup --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jeldrik Hanschke <admin@jhanschke.de>
78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
import { RestSerializer } from 'miragejs';
|
|
import { dasherize } from '@ember/string';
|
|
import { pluralize } from 'ember-inflector';
|
|
|
|
export default RestSerializer.extend({
|
|
keyForForeignKey(relationshipName) {
|
|
return relationshipName;
|
|
},
|
|
keyForRelationshipIds(type) {
|
|
return type;
|
|
},
|
|
normalize(payload) {
|
|
let [type] = Object.keys(payload);
|
|
let attrs = payload[type];
|
|
let { belongsToAssociations, hasManyAssociations } =
|
|
this.registry.schema._registry[type].class.prototype;
|
|
|
|
let jsonApiPayload = {
|
|
data: {
|
|
type: pluralize(type),
|
|
},
|
|
};
|
|
|
|
Object.keys(attrs).forEach((key) => {
|
|
if (key === 'id') {
|
|
// records id
|
|
jsonApiPayload.data.id = attrs.id;
|
|
} else if (
|
|
belongsToAssociations.hasOwnProperty(key) ||
|
|
hasManyAssociations.hasOwnProperty(key)
|
|
) {
|
|
// relationship
|
|
if (!jsonApiPayload.data.hasOwnProperty('relationships')) {
|
|
jsonApiPayload.data.relationships = {};
|
|
}
|
|
|
|
let association = belongsToAssociations.hasOwnProperty(key)
|
|
? belongsToAssociations[key]
|
|
: hasManyAssociations[key];
|
|
let associationType = belongsToAssociations.hasOwnProperty(key)
|
|
? 'belongsTo'
|
|
: 'hasMany';
|
|
let associationModel = association.modelName;
|
|
let relationshipObject = {};
|
|
|
|
switch (associationType) {
|
|
case 'belongsTo':
|
|
relationshipObject.data = {
|
|
type: associationModel,
|
|
id: attrs[key],
|
|
};
|
|
break;
|
|
case 'hasMany':
|
|
relationshipObject.data = [];
|
|
attrs[key].forEach((value) => {
|
|
relationshipObject.data.push({
|
|
type: associationModel,
|
|
id: value,
|
|
});
|
|
});
|
|
break;
|
|
}
|
|
|
|
jsonApiPayload.data.relationships[key] = relationshipObject;
|
|
} else {
|
|
// attribute
|
|
if (!jsonApiPayload.data.hasOwnProperty('attributes')) {
|
|
jsonApiPayload.data.attributes = {};
|
|
}
|
|
|
|
jsonApiPayload.data.attributes[dasherize(key)] = attrs[key];
|
|
}
|
|
});
|
|
|
|
return jsonApiPayload;
|
|
},
|
|
serializeIds: 'always',
|
|
});
|