(function () { 'use strict'; //provides functionality that interacts with server side RESTful endpoints var serviceId = 'myBadgesDataContext'; angular.module('mybadges').factory(serviceId, ['$q', '$http', 'myBadgesConfig', 'DSCacheFactory', datacontext]); function datacontext($q, $http, config, DSCacheFactory) { var service = { getDiscoveryForUser: getDiscoveryForUser, validateClaim: validateClaim, getClaimBadge: getClaimBadge, getClaimBadgeUser: getClaimBadgeUser, getClaimBadgeByBadge: getClaimBadgeByBadge, saveUserClaim: saveUserClaim, removeUserClaim: removeUserClaim, removeUserBadge: removeUserBadge, getClaims: getClaims, getClaimById: getClaimById }; return service; function saveUserClaim(claim) { var request = $http({ method: "post", url: config.mybadgesUrl + '/userclaims/saveUserClaim?cache=' + Date.now(), data:claim }); return (request.then(function (response) { return response.data; }, handleError)); } function removeUserBadge(badge) { var request = $http({ method: "delete", url: config.mybadgesUrl + '/userclaims/badge/' + badge.id + '?cache=' + Date.now(), }); return (request.then(function (response) { return response.data; }, handleError)); } function removeUserClaim(claim) { var request = $http({ method: "delete", url: config.mybadgesUrl + '/userclaims/' + claim.id + '?cache=' + Date.now(), }); return (request.then(function (response) { return response.data; }, handleError)); } function getDiscoveryForUser() { var request = $http({ method: "get", url: config.mybadgesUrl + '/discover?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function validateClaim(claimCode, badgeId) { var request = $http({ method: "get", url: config.mybadgesUrl + '/discover/validate/' + claimCode + '/' + badgeId + '?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function getClaimById(claimId) { var request = $http({ method: "get", url: config.mybadgesUrl + '/userclaims/' + claimId + '/claim?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function getClaimBadge(claimCode) { var request = $http({ method: "get", url: config.mybadgesUrl + '/discover/claimbadge/' + claimCode + '?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function getClaimBadgeByBadge(badgeId) { var request = $http({ method: "get", url: config.mybadgesUrl + '/discover/claimbadge/badge/' + badgeId + '?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function getClaimBadgeUser(claimCode, claimType) { var request = $http({ method: "get", url: config.mybadgesUrl + '/userclaims/' + claimCode + '/latest/' + claimType + '?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function getClaims() { var request = $http({ method: "get", url: config.mybadgesUrl + '/userclaims?cache=' + Date.now() }); return (request.then(function (response) { return response.data; }, handleError)); } function handleError(response) { // The API response from the server should be returned in a // nomralized format. However, if the request was not handled by the // server (or what not handles properly - ex. server error), then we // may have to normalize it on our end, as best we can. if ( !angular.isObject(response.data) || !response.data.message ) { return ($q.reject("An unknown error occurred.")); } // Otherwise, use expected error message. return ($q.reject(response.data.message)); } // I transform the successful response, unwrapping the application data // from the API response payload. function handleSuccess(response) { return (response.data); } } })();