(function () { if (!window.cet || !window.cet.microservices || !window.cet.microservices.apiready) { window.cet = window.cet || {}; cet.microservices = cet.microservices || {}; let apiready = new Promise(function (resolve, reject) { var scriptElement = document.createElement("script"); scriptElement.addEventListener('load', resolve); scriptElement.addEventListener('error', reject); var origin = document.currentScript.src.split('/', 3).join('/'); scriptElement.src = origin + "/provider/ApiProvider.js?8dc3062e1069100"; document.head.appendChild(scriptElement); }); cet.microservices.apiready = apiready; } let selfUrl = document.currentScript.src; cet.microservices.apiready.then(() => { cet.microservices.api.system.addService(selfUrl); }); })(); window.cet = window.cet || {}; window.cet.microservices = window.cet.microservices || {}; cet.microservices.recommendationsapi = (function () { const isSafe = true; //https://nairobigateway${getEnvDomain()}cet.ac.il // in order to call 'safe' api safely, load authapi in a promise: const accessManagementApiReady = isSafe ? cet.microservices.apiready.then(() => { return cet.microservices.api.loadApi("/accessmngapi/provider/accessmanagement.js", "apigateway"); }) : cet.microservices.apiready; const settings = { apiUrl: "/nairobirecommendationsapi/" }; const isDevEnvironment = (location.host.indexOf('.dev') > 0 || location.host.indexOf('.testing') > 0); const baseURI = new URL(document.currentScript.src).origin; /*------------------------------------------------------------------------------*/ /* Build URL query from the given payload object. */ const buildQueryFromPayload = function (payload) { if (payload && typeof payload === 'object') { var str = []; for (var p in payload) { if (payload.hasOwnProperty(p)) { if (Array.isArray(payload[p])) { for (var i = 0; i < payload[p].length; i++) { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(payload[p][i])); } } else { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(payload[p])); } } } return str.length > 0 ? '?' + str.join('&') : ''; } return ''; }; /*------------------------------------------------------------------------------*/ /* Validate single parameter. */ const validateParameter = function (pName, pValue) { if ((typeof pValue === 'string' && pValue.trim().length === 0) || (Array.isArray(pValue) && pValue.length === 0)) { return pName + ' cannot be empty'; } return ''; }; /*------------------------------------------------------------------------------*/ /* Validate request object. */ const validateRequest = function (request, relevantParameters) { if (!request) { return 'request data is missing'; } for (var i = 0; i < relevantParameters.length; i++) { var param = relevantParameters[i]; var paramParts = param.split('.'); var subRequest = request; if (paramParts.length > 1) { for (var p = 0; p < paramParts.length - 1; p++) { subRequest = subRequest && subRequest[paramParts[p]]; param = paramParts[p + 1]; } } if (!subRequest || !subRequest.hasOwnProperty(param)) { return relevantParameters[i] + ' is missing'; } else { var error = validateParameter(relevantParameters[i], subRequest[param]); if (error) { return error; } } } return ''; }; /*------------------------------------------------------------------------------*/ const processRequest = (request) => { var promise = new Promise(function (resolve, reject) { var validationErrorMsg = request.validationParams ? validateRequest(request.data, request.validationParams) : ''; if (validationErrorMsg) { isDevEnvironment && alert(validationErrorMsg); reject({ 'name': 'ProviderValidationError', 'message': validationErrorMsg }); } else { accessManagementApiReady.then(async () => { try { var result = null; var _cetms = isSafe ? cetms.safe : cetms; if (request.type === 'get') { result = await _cetms.get(request.URL + buildQueryFromPayload(request.data)); } else if (request.type === 'post') { result = await _cetms.post(request.URL, request.data); } resolve(result); } catch (error) { reject(error); } }).catch(error => { reject(error); }); } }); return promise; }; //#region RECOMMENDATIONS /*------------------------------------------------------------------------------*/ const getRecommendations = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Recommendations/GetRecommendations', data: requestData, validationParams: ["teacherId", "dimensionParams"] }); }; /*------------------------------------------------------------------------------*/ const getAllRecommendations = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Recommendations/getAllRecommendations', data: requestData, validationParams: ["teacherId", "dimensionParams"] }); }; /*------------------------------------------------------------------------------*/ const getRecommendationsHistogtram = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Recommendations/GetRecommendationsHistogtram', data: requestData, validationParams: ["teacherId"] }); }; /*------------------------------------------------------------------------------*/ //#endregion return { 'recommendations': { getRecommendations, getAllRecommendations }, 'recommendationsHistogtram': { getRecommendationsHistogtram } }; })();