@angula_wk wrote:
Hi guys,
I'm quite new in Ember and I occured the problem i can't handle. When I try to save my model, the following error occures:
PATCH http://localhost:3000/api/v2/profile/properties/5f0b4492-a54a-4976-a81b-44c5a6755959/travel-agent-profiles/968d81c9-6cdb-4083-a861-d80054684a39 412 (Precondition Failed). I know it's happening because I'm using 3 paths for backend, so my adapter looks like:import ApplicationAdapter from "./application";
import Ember from "ember";export default ApplicationAdapter.extend({
session: Ember.inject.service(),urlForFindRecord(id) {
const host = this.get("host");
const namespace = this.get("namespace");
const propertyId = this.get("session.selectedProperty.id");
return${host}/${namespace}/profile/properties/${propertyId}/travel-agent-profiles/${id}
;
},urlForCreateRecord() {
const propertyId = this.get("session.selectedProperty.id");
const host = this.get("host");
const namespace = this.get("namespace");
return${host}/${namespace}/profile/properties/${propertyId}/travel-agent-profiles
;
},urlForUpdateRecord(id) {
const propertyId = this.get("session.selectedProperty.id");
const host = this.get("host");
return${host}/api/v2/profile/properties/${propertyId}/travel-agent-profiles/${id}
;
},buildURL(modelName, id, snapshot, requestType, query) {
if(requestType === "POST") {
return this.urlForFindRecord(id).replace("v1", "v2");
} else {
return this._super(modelName, id, snapshot, requestType, query);
}
},methodForRequest(params) {
let { requestType } = params;switch (requestType) { case "createRecord": return "POST"; case "updateRecord": return "PATCH"; case "deleteRecord": return "DELETE"; } return "GET";
}
});And my serializer:
import ApplicationSerializer from "./application";
import DS from "ember-data";export default ApplicationSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
communicationDetails: { embedded: "always" }
},normalizeFindRecordResponse: function(store, primaryModelClass, payload, id, requestType) {
const response = {
id: payload.id,
fullName: payload.details.fullName,
isInactive: payload.isInactive,
titleId: payload.details.titleId,
abbreviation: payload.details.abbreviation,
preferredLanguageCode: payload.details.preferedLanguageCode,
iataCode: payload.details.iata,
alternateFullName: payload.details.alternateFullName,
addresses: payload.addresses.collection,
communicationDetails: payload.communicationDetails.collection,
aggregateVersion: payload.profileVersion,
etag: payload["etag"]
};return this._super(store, primaryModelClass, response, id, requestType);
},
serialize: function(snapshot) {
const attributes = snapshot.attributes();return { profile: { fullName: attributes.fullName, abbreviation: attributes.abbreviation, alternateFullName: attributes.alternateFullName, iata: attributes.iataCode, preferedLanguageCode: attributes.preferredLanguageCode }, aggregateVersion: attributes.aggregateVersion };
}
});And model:
import DS from "ember-data";
import ApplicationModel from "./application-model";
import HasCommunicationDetails from "./shared/has-communication-details";
import Ember from "ember";
import TravelAgentValidations from "above-cloud/validations/travel-agent-validations";
import { modelAction } from "ember-custom-actions";export default ApplicationModel.extend(HasCommunicationDetails, TravelAgentValidations, {
fullName: DS.attr(),
abbreviation: DS.attr(),
isInactive: DS.attr(),
alternateFullName: DS.attr(),
iataCode: DS.attr(),
primaryContacts: DS.attr(),
addresses: DS.attr(),
preferredLanguageCode: DS.attr(),
aggregateVersion: DS.attr(),
etag: DS.attr(),activate: modelAction("activate", {type: "POST"}),
deactivate: modelAction("deactivate", {type: "POST"}),primaryAddress: function() {
const addresses = this.get("addresses");
return addresses.find(x => x.isPrimary);
}.property("addresses"),formattedAddress: function() {
const address = this.get("primaryAddress");
return [
address.address,
address.city,
address.state,
address.postCode,
address.country
].filter(Ember.isPresent).join(", ");
}.property("primaryAddress")
});The thing is that in backend it's required to pass if match header whan I save the model. But in backend in api/v1 GET /api/v{apiVersion}/profile/properties/{propertyId}/travel-agent-profiles/{profileId} sends profileVersion, in api/v2 GET /api/v{apiVersion}/profile/properties/{propertyId}/travel-agent-profiles/{profileId} etag and in PATCH
{
"profile": {
"fullName": "string",
"abbreviation": "string",
"iata": 0,
"preferedLanguageCode": "string",
"alternateFullName": "string"
}
}
does not send also etag as profileVersion. I know I have to pass if match header somehow. Any ideas what to do?
Thank you!!
Posts: 1
Participants: 1