route4me-node
Version:
Access Route4Me's logistics-as-a-service API using our Node.js SDK
277 lines (246 loc) • 7.92 kB
JavaScript
"use strict";
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var utils = require("../utils");
/**
* Optimizations facility
*
* @category Optimizations
*/
var Optimizations = function () {
/**
* Constructor
*
* @see {@link https://route4me.io/docs/#optimizations}
* @since 0.1.3
* @private
*
* @param {RequestManager} requestManager - Request Manager
* @return {Optimizations} - Optimizations facility
*/
function Optimizations(requestManager) {
_classCallCheck(this, Optimizations);
this.r = requestManager;
}
/**
* Create a new optimization
*
* @see {@link https://route4me.io/docs/#create-an-optimization}
*
* @param {jsonschema:Optimizations.CreateRequest} optimization - Parameters for new optimization
* @param {module:route4me-node~RequestCallback<jsonschema:Optimizations.Response>}
* [callback]
*/
_createClass(Optimizations, [{
key: "create",
value: function create(optimization, callback) {
return this.r._makeRequest({
method: "POST",
path: "/api.v4/optimization_problem.php",
body: optimization,
validationContext: "Optimizations.Response"
}, callback);
}
/**
* GET a single optimization by
* [optimization_problem_id]{@link Optimizations#get~id} parameter.
*
* @see {@link https://route4me.io/docs/#get-an-optimization}
*
* @param {string} id - Optimization Problem ID
* @param {module:route4me-node~RequestCallback<jsonschema:Optimizations.Optimization>}
* [callback]
*/
}, {
key: "get",
value: function get(id, callback) {
return this.r._makeRequest({
method: "GET",
path: "/api.v4/optimization_problem.php",
qs: {
"optimization_problem_id": id
},
validationContext: "Optimizations.Optimization"
}, callback);
}
/**
* GET all optimizations belonging to an user.
*
* @see {@link https://route4me.io/docs/#get-optimizations}
*
* @todo TODO: there is no JSON-schema for the response
* @todo TODO: convert options to optional parameter
*
* @param {(number|string|Array<string>|Array<number>)} states - List of states [1..6]
* @param {Object} options - List-parameters
* @param {number} [options.limit] - List limit
* @param {number} [options.offset] - List offset
* @param {module:route4me-node~RequestCallback<jsonschema:Optimizations.Optimizations>}
* [callback]
*/
}, {
key: "list",
value: function list(states, options, callback) {
var validStates = utils.toOptimizationStatesSafe(states);
if (validStates instanceof Error) {
var err = validStates;
return this.r._makeError(err, callback);
}
var qs = {};
if (validStates) {
qs["states"] = validStates;
}
if ("offset" in options) {
qs["offset"] = options.offset;
}
if ("limit" in options) {
qs["limit"] = options.limit;
}
return this.r._makeRequest({
method: "GET",
path: "/api.v4/optimization_problem.php",
qs,
validationContext: "Optimizations.Optimizations"
}, callback);
}
/*
* Edit optimization
*
* Re-optimize existing optimizations by changing some parameters or addresses.
*
* @see {@link https://route4me.io/docs/#re-optimize-an-optimization}
* @since 0.1.7
*
* @param {string} id - Optimization Problem ID
* @param {jsonschema:Optimizations.CreateRequest} data - New values for `Optimization`
* @param {boolean} [reoptimize=false] - Determine, whether the `Optimization`
* should be reoptimized
*
* @param {module:route4me-node~RequestCallback<jsonschema:Optimizations.Response>}
* [callback]
*/
}, {
key: "update",
value: function update(id, data, reoptimize, callback) {
var cb = callback;
var reopt = reoptimize;
if (undefined === cb && "function" === typeof reopt) {
cb = reopt;
reopt = false;
}
return this.r._makeRequest({
method: "PUT",
path: "/api.v4/optimization_problem.php",
qs: {
"optimization_problem_id": id,
"reoptimize": reopt ? "1" : "0"
},
body: data,
validationContext: "Optimizations.Response"
}, cb);
}
/**
* Remove an existing optimization belonging to an user.
*
* @see {@link https://route4me.io/docs/#remove-an-optimization}
* @since 0.1.7
*
* @todo TODO: There is no schema for validation an output
*
* @example
* const response = {
* "status":true,
* "removed":1
* }
*
* @param {string} id - Optimization Problem ID
* @param {module:route4me-node~RequestCallback<jsonschema:Optimizations.RemoveResponse>}
* [callback]
*/
}, {
key: "remove",
value: function remove(id, callback) {
return this.r._makeRequest({
method: "DELETE",
path: "/api.v4/optimization_problem.php",
qs: {
"optimization_problem_id": id
},
validationContext: "Optimizations.RemoveResponse"
}, callback);
}
/**
* Insert an address into an optimization, resulting in the recalculation of optimal routes.
*
* @see {@link https://route4me.io/docs/#insert-an-address-into-an-optimization}
* @tag Optimizations
* @tag Addresses
* @since 0.1.7
*
* @param {string} id - Optimization Problem ID
* @param {Array<jsonschema:Addresses.Address>} addresses - Addresses array
* @param {boolean} [reoptimize=false] - Determine, whether the
* `Optimization` should be reoptimized
*
* @param {module:route4me-node~RequestCallback<jsonschema:Addresses.Addresses>}
* [callback]
*/
}, {
key: "linkAddress",
value: function linkAddress(id, addresses, reoptimize, callback) {
var cb = callback;
var reopt = reoptimize;
if (undefined === cb && "function" === typeof reopt) {
cb = reopt;
reopt = false;
}
return this.r._makeRequest({
method: "PUT",
path: "/api.v4/optimization_problem.php",
qs: {
"optimization_problem_id": id,
"reoptimize": reopt ? "1" : "0"
},
body: { "addresses": addresses },
validationContext: "Addresses.Addresses"
}, cb);
}
/**
* Remove a destination (an address) with specified route_destination_id
* from an optimization problem with specified optimization_problem_id.
*
* @see {@link https://route4me.io/docs/#remove-an-address-from-an-optimization}
* @tag Optimizations
* @tag Addresses
* @since 0.1.7
*
* @todo TODO: There is no schema for validation an output
*
* @example
* const response = {
* "deleted":true,
* "route_destination_id":1
* }
*
* @param {string} id - Optimization Problem ID
* @param {number} addressId - Address ID
* @param {module:route4me-node~RequestCallback<jsonschema:Optimizations.UnlinkAddressResponse>}
* [callback]
*/
}, {
key: "unlinkAddress",
value: function unlinkAddress(id, addressId, callback) {
return this.r._makeRequest({
method: "DELETE",
path: "/api.v4/address.php",
qs: {
"optimization_problem_id": id,
"route_destination_id": addressId
},
validationContext: "Optimizations.UnlinkAddressResponse"
}, callback);
}
}]);
return Optimizations;
}();
module.exports = Optimizations;