/** * Created by robin on 10/24/15. */ (function () { 'use strict'; angular.module('luticate2Utils') .factory('luRequest', ['$q', '$http', 'luBusyBusiness', function ($q, $http, luBusyBusiness) { var luRequest = {}; luRequest.hooks = { before: [], resolve: [], reject: [] }; luRequest.addHook = function(type, callback) { if (luRequest.hooks.hasOwnProperty(type)) { luRequest.hooks[type].push(callback); } }; luRequest.get = function(url, dataGet, luBusyGroups) { return luRequest.request(url, 'GET', dataGet, null, luBusyGroups); }; luRequest.post = function(url, dataGet, dataPost, luBusyGroups) { return luRequest.request(url, 'POST', dataGet, dataPost, luBusyGroups); }; luRequest.put = function(url, dataGet, dataPost, luBusyGroups) { return luRequest.request(url, 'PUT', dataGet, dataPost, luBusyGroups); }; luRequest.delete = function(url, dataGet, dataPost, luBusyGroups) { return luRequest.request(url, 'DELETE', dataGet, dataPost, luBusyGroups); }; function reject(url, method, dataGet, dataPost, luBusyGroups, deferred, data, status) { var error = { data: data, status: status }; for (var i = 0; i < luRequest.hooks.reject.length; ++i) { luRequest.hooks.reject[i](url, method, dataGet, dataPost, luBusyGroups, error); } deferred.reject(error); if (luBusyGroups != null) { luBusyBusiness.reject(luBusyGroups, error); } } function resolve(url, method, dataGet, dataPost, luBusyGroups, deferred, data) { for (var i = 0; i < luRequest.hooks.resolve.length; ++i) { luRequest.hooks.resolve[i](url, method, dataGet, dataPost, luBusyGroups, data); } deferred.resolve(data.data); if (luBusyGroups != null) { luBusyBusiness.resolve(luBusyGroups); } } luRequest.request = function(url, method, dataGet, dataPost, luBusyGroups) { if (luBusyGroups != null) { luBusyBusiness.initGroups(luBusyGroups); } var deferred = $q.defer(); url = url.replace(/\/+$/, ''); var params = { url: url, method: method, params: dataGet, headers: {} }; if (dataPost != null && dataPost.constructor === FormData) { params.data = dataPost; params.headers['Content-Type'] = undefined; } else { params.data = JSON.stringify(dataPost); params.headers['Content-Type'] = 'application/json'; } for (var i = 0; i < luRequest.hooks.before.length; ++i) { luRequest.hooks.before[i](url, method, dataGet, dataPost, luBusyGroups); } $http(params) .then(function (response) { var result = response.data; var status = response.status; if (result == null || typeof result !== 'object') { reject(url, method, dataGet, dataPost, luBusyGroups, deferred, { message: "Failed to parse response", code: status, version: null, data: null }, status); } else if (result.message != null) { reject(url, method, dataGet, dataPost, luBusyGroups, deferred, result, status); } else { resolve(url, method, dataGet, dataPost, luBusyGroups, deferred, result); } }, function (response) { var result = response.data; var status = response.status; if (result == null || typeof result !== 'object') { reject(url, method, dataGet, dataPost, luBusyGroups, deferred, { message: "Failed to parse response", code: status, version: null, data: null }, status); } else { reject(url, method, dataGet, dataPost, luBusyGroups, deferred, result, status); } }); return deferred.promise; }; return luRequest; }]); })();