import Adapter, { REQUEST_CREATE, REQUEST_UPDATE, DATACENTER_QUERY_PARAM as API_DATACENTER_KEY, } from './application'; import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/policy'; import { FOREIGN_KEY as DATACENTER_KEY } from 'consul-ui/models/dc'; import { OK as HTTP_OK } from 'consul-ui/utils/http/status'; import { PUT as HTTP_PUT } from 'consul-ui/utils/http/method'; export default Adapter.extend({ urlForQuery: function(query, modelName) { return this.appendURL('acl/policies', [], this.cleanQuery(query)); }, urlForQueryRecord: function(query, modelName) { if (typeof query.id === 'undefined') { throw new Error('You must specify an id'); } return this.appendURL('acl/policy', [query.id], this.cleanQuery(query)); }, urlForCreateRecord: function(modelName, snapshot) { return this.appendURL('acl/policy', [], { [API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY), }); }, urlForUpdateRecord: function(id, modelName, snapshot) { return this.appendURL('acl/policy', [snapshot.attr(SLUG_KEY)], { [API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY), }); }, urlForDeleteRecord: function(id, modelName, snapshot) { return this.appendURL('acl/policy', [snapshot.attr(SLUG_KEY)], { [API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY), }); }, urlForTranslateRecord: function(modelName, snapshot) { return this.appendURL('acl/policy/translate', [], {}); }, dataForRequest: function(params) { const data = this._super(...arguments); switch (params.requestType) { case REQUEST_UPDATE: case REQUEST_CREATE: return data.policy; } return data; }, handleResponse: function(status, headers, payload, requestData) { let response = payload; if (status === HTTP_OK) { const url = this.parseURL(requestData.url); switch (true) { case response === true: response = this.handleBooleanResponse(url, response, PRIMARY_KEY, SLUG_KEY); break; case Array.isArray(response): response = this.handleBatchResponse(url, response, PRIMARY_KEY, SLUG_KEY); break; default: response = this.handleSingleResponse(url, response, PRIMARY_KEY, SLUG_KEY); } } return this._super(status, headers, response, requestData); }, methodForRequest: function(params) { switch (params.requestType) { case REQUEST_CREATE: return HTTP_PUT; } return this._super(...arguments); }, });