client-ui
Version:
Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront
145 lines (130 loc) • 5.21 kB
JavaScript
/* global moduleName ioGetBlackbox */
angular.module(moduleName).service('equifax', ['$q', '$timeout', 'util', 'client', '$http', 'rootConstants', function ($q, $timeout, util, client, $http, rootConstants) {
var self = this;
self.maxRetries = 10;
self.retryInterval = 1000;
self.awaitingResults = {};
if (typeof ioGetBlackbox === 'function') {
self.iovationBlackBox = ioGetBlackbox;
}
function getBlackBox() {
self.numTries = 0;
return self.testBlackbox();
}
function testBlackbox() {
if (typeof ioGetBlackbox === "undefined") {
return self.tryAgain();
} else {
var response = ioGetBlackbox();
if (response.finished) {
var deferred = $q.defer();
deferred.resolve(response.blackbox);
return deferred.promise;
} else {
return self.tryAgain();
}
}
return deferred.promise;
}
function tryAgain(deferred) {
if (typeof deferred === "undefined") {
deferred = $q.defer();
}
if (++self.numTries <= self.maxRetries) {
$timeout(function() {
deferred.resolve(self.testBlackbox());
}, self.retryInterval);
} else {
deferred.resolve("NO_DOWNLOAD");
}
return deferred.promise;
}
function getQuizQuestions(clientId) {
var deferred = $q.defer();
if (!self.awaitingResults.hasOwnProperty("getQuizQuestions") || self.awaitingResults.getQuizQuestions === false) {
self.awaitingResults.getQuizQuestions = true;
$http.get(rootConstants.server + "clients/" + clientId + "/getKBAQuestions/v1.1")
.then(function(response) {
self.awaitingResults.getQuizQuestions = false;
return deferred.resolve(response.data);
}, function(error) {
self.awaitingResults.getQuizQuestions = false;
return deferred.reject(error.data);
});
}
return deferred.promise;
}
function mapQuizAnswers(quiz, parentCallback) {
var error = null;
var quizQuestions = util.testElement(quiz, "Quiz.Question");
if (!quizQuestions) {
return parentCallback("There are no questions on this quiz");
}
if (!util.testElement(quiz, "attributes.transactionKey")) {
return parentCallback("There is no transaction key");
}
var output = {
"QuizAnswerRequest": {
"attributes": {
"transactionKey": quiz.attributes.transactionKey,
"quizId": util.testElement(quiz, "Quiz.attributes.quizId") ? util.testElement(quiz, "Quiz.attributes.quizId") : "No quiz id"
},
"Answer": [
]
}
};
quizQuestions.forEach(function(element, index, array) {
createAnswerObject(element, function(err, answerObj) {
if (err) {
error = err;
} else {
output.QuizAnswerRequest.Answer.push(answerObj);
}
});
});
function createAnswerObject(element, callback) {
var questionId = util.testElement(element, "attributes.questionId");
var answerId = util.testElement(element, "userAnswer.attributes.answerId");
if (!questionId) {
return callback("Missing question id");
}
if (!answerId) {
return callback("Missing answer id");
}
return callback(null, {
"attributes": {
"questionId": questionId,
"answerId": answerId
}
});
}
if (error) {
return parentCallback(error);
} else {
return parentCallback(null, output);
}
}
function sendQuizResponse(clientId, quizAnswers) {
var deferred = $q.defer();
if (!self.awaitingResults.hasOwnProperty("sendQuizResponse") || self.awaitingResults.sendQuizResponse === false) {
self.awaitingResults.sendQuizResponse = true;
mapQuizAnswers(quizAnswers, function(err, responseBody) {
$http.post(rootConstants.server + "clients/" + clientId + "/submitKBAAnswers/v1.1", responseBody)
.then(function(response) {
self.awaitingResults.sendQuizResponse = false;
return deferred.resolve(response.data);
}, function(error) {
self.awaitingResults.sendQuizResponse = false;
return deferred.reject(error.data);
});
});
}
return deferred.promise;
}
self.getBlackBox = getBlackBox;
self.getQuizQuestions = getQuizQuestions;
self.mapQuizAnswers = mapQuizAnswers;
self.sendQuizResponse = sendQuizResponse;
self.tryAgain = tryAgain;
self.testBlackbox = testBlackbox;
}]);