UNPKG

@expressive-analytics/deep-thought-service

Version:

Typescript conversion of Deep Thought Services (formerly providers)

71 lines (70 loc) 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DTRESTService = void 0; const DTService_1 = require("./DTService"); class DTRESTService extends DTService_1.DTService { performAction(action) { let obj = this.handleREST(action, this.request.method); let str = this.response.objectAsRenderable(obj, this.$public); this.setResponse(str); } isMultipleObjects(a) { return Array.isArray(a); } handleREST(action, method = "GET") { // because OAuth doesn't sign DELETE requests, and doesn't support PATCH, // we use POST... we need to map this back to the appropriate logic // (see mapping in DTOAuth1Delegate) if (action == "actionremove") { method = "DELETE"; action = undefined; } if (action == "actionupsert") { method = "PATCH"; action = undefined; } if (this.actionExists(action)) { // we're already defined, just do it this.recordRequest(action); return this[action](); } this.recordRequest(method); // we're using the method to infer the action // determine whether this is a collection or individual entity const id = this.request.params[this.lookup_column]; let is_collection = typeof (this.request.params["id"]) === 'undefined' || this.request.params["id"] == ''; switch (method) { case "GET": if (is_collection) return this.actionList(); else return this.actionGet(); case "DELETE": // delete a resource if (is_collection) return this.actionRemoveMany(); else return this.actionRemove(); case "POST": // non-idempotent if (is_collection) return this.actionCreate(); else return this.actionUpdate(); case "PUT": // idempotent, full-resource setter if (is_collection) { this.actionRemoveMany(); return this.actionCreateMany(); } else { this.actionRemove(); return this.actionCreate(); } case "PATCH": // filter-based upsert if (typeof this.request.params["dt_items"] !== 'undefined') return this.actionUpsertMany(); // patch-many requires a special param else return this.actionUpsert(); default: // e.g. OPTIONS, HEAD return null; } this.response.error(400); } } exports.DTRESTService = DTRESTService;