UNPKG

channelape-sdk

Version:
162 lines 7.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Resource_1 = require("../../model/Resource"); const Version_1 = require("../../model/Version"); const GenerateApiError_1 = require("../../utils/GenerateApiError"); const Q = require("q"); const Qs = require("qs"); const JsonOrderFormatterService_1 = require("./JsonOrderFormatterService"); const EXPECTED_GET_STATUS = 200; const EXPECTED_CREATE_STATUS = 202; const EXPECTED_UPDATE_STATUS = 202; class OrdersCrudService { constructor(client) { this.client = client; } get(orderIdOrRequest) { if (typeof orderIdOrRequest === 'string') { return this.getByOrderId(orderIdOrRequest); } const deferred = Q.defer(); const getSinglePage = false; this.getOrdersByRequest(orderIdOrRequest, [], deferred, getSinglePage); return deferred.promise; } getPage(orderRequest) { const deferred = Q.defer(); const getSinglePage = true; this.getOrdersByRequest(orderRequest, [], deferred, getSinglePage); return deferred.promise; } update(order) { const deferred = Q.defer(); const requestUrl = `${Version_1.default.V1}${Resource_1.default.ORDERS}/${order.id}`; const options = { data: order }; if (order.actionId) { options.headers = { 'X-Channel-Ape-Action-Id': order.actionId }; } this.client.put(requestUrl, options, (error, response, body) => { this.mapOrderPromise(requestUrl, deferred, error, response, body, EXPECTED_UPDATE_STATUS); }); return deferred.promise; } patch(order) { const deferred = Q.defer(); const requestUrl = `${Version_1.default.V1}${Resource_1.default.ORDERS}/${order.id}`; const options = { data: order }; if (order.actionId) { options.headers = { 'X-Channel-Ape-Action-Id': order.actionId }; } this.client.patch(requestUrl, options, (error, response, body) => { this.mapOrderPromise(requestUrl, deferred, error, response, body, EXPECTED_UPDATE_STATUS); }); return deferred.promise; } create(order) { const deferred = Q.defer(); const requestUrl = `${Version_1.default.V1}${Resource_1.default.ORDERS}`; const options = { data: order }; if (order.actionId) { options.headers = { 'X-Channel-Ape-Action-Id': order.actionId }; } this.client.post(requestUrl, options, (error, response, body) => { this.mapOrderPromise(requestUrl, deferred, error, response, body, EXPECTED_CREATE_STATUS); }); return deferred.promise; } getByOrderId(orderId) { const deferred = Q.defer(); const requestUrl = `/${Version_1.default.V1}${Resource_1.default.ORDERS}/${orderId}`; this.client.get(requestUrl, {}, (error, response, body) => { this.mapOrderPromise(requestUrl, deferred, error, response, body, EXPECTED_GET_STATUS); }); return deferred.promise; } getOrdersByRequest(ordersRequest, orders, deferred, getSinglePage) { const requestUrl = `/${Version_1.default.V1}${Resource_1.default.ORDERS}`; const ordersQueryParams = ordersRequest; if (ordersQueryParams.startDate != null && typeof ordersQueryParams.startDate !== 'string') { ordersQueryParams.startDate = ordersQueryParams.startDate.toISOString(); } if (ordersQueryParams.endDate != null && typeof ordersQueryParams.endDate !== 'string') { ordersQueryParams.endDate = ordersQueryParams.endDate.toISOString(); } if (ordersQueryParams.updatedAtStartDate != null && typeof ordersQueryParams.updatedAtStartDate !== 'string') { ordersQueryParams.updatedAtStartDate = ordersQueryParams.updatedAtStartDate.toISOString(); } if (ordersQueryParams.updatedAtEndDate != null && typeof ordersQueryParams.updatedAtEndDate !== 'string') { ordersQueryParams.updatedAtEndDate = ordersQueryParams.updatedAtEndDate.toISOString(); } const options = { params: ordersQueryParams, paramsSerializer: this.paramsSerializer }; this.client.get(requestUrl, options, (error, response, body) => { const requestResponse = { error, response, body }; this.mapOrdersPromise(requestUrl, deferred, requestResponse, orders, ordersRequest, EXPECTED_GET_STATUS, getSinglePage); }); } mapOrderPromise(requestUrl, deferred, error, response, body, expectedStatusCode) { if (error) { deferred.reject(error); } else if (response.status === expectedStatusCode) { const order = JsonOrderFormatterService_1.default.formatOrder(body); deferred.resolve(order); } else { const channelApeErrorResponse = (0, GenerateApiError_1.default)(requestUrl, response, body, expectedStatusCode); deferred.reject(channelApeErrorResponse); } } mapOrdersPromise(requestUrl, deferred, requestCallbackParams, orders, ordersRequest, expectedStatusCode, getSinglePage) { if (requestCallbackParams.error) { deferred.reject(requestCallbackParams.error); } else if (requestCallbackParams.response.status === expectedStatusCode) { const data = requestCallbackParams.body; const mergedOrders = orders.concat(data.orders); if (getSinglePage) { deferred.resolve({ orders: mergedOrders.map(o => JsonOrderFormatterService_1.default.formatOrder(o)), pagination: data.pagination }); } else if (data.pagination.lastPage) { const ordersToReturn = mergedOrders.map(o => JsonOrderFormatterService_1.default.formatOrder(o)); deferred.resolve(ordersToReturn); } else { const newOrdersRequest = Object.assign(Object.assign({}, ordersRequest), { lastKey: data.pagination.lastKey }); this.getOrdersByRequest(newOrdersRequest, mergedOrders, deferred, getSinglePage); } } else { const channelApeErrorResponse = (0, GenerateApiError_1.default)(requestUrl, requestCallbackParams.response, requestCallbackParams.body, expectedStatusCode); deferred.reject(channelApeErrorResponse); } } paramsSerializer(params) { // Remove brackets from duplicate query parameters // e.g. ?foo[]=5&foo[]=2 becomes ?foo=5&foo=2 return Qs.stringify(params, { arrayFormat: 'repeat' }); } } exports.default = OrdersCrudService; //# sourceMappingURL=OrdersCrudService.js.map