UNPKG

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
/* 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; }]);