(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.dashboardapi = (function () { // in order to call 'safe' api safely, make sure accessmanagement is loaded: var safeApiReady = cet.microservices.apiready.then(() => { if (cet.accessmanagement) return Promise.resolve(); else return cet.microservices.api.loadApi("/accessmngapi/provider/accessmanagement.js", "apigateway"); }); const settings = { apiUrl: "/dashboardapi/" }; const isDevEnvironment = (location.host.indexOf('.dev') > 0 || location.host.indexOf('.testing') > 0); /*------------------------------------------------------------------------------*/ /* 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) { if (isDevEnvironment) { throw new Error({ name: 'ProviderValidationError', message: validationErrorMsg }); } reject({ name: 'ProviderValidationError', message: validationErrorMsg }); } else { safeApiReady.then(async () => { try { var result = null; if (request.type === 'get') { result = await cetms.safe.get(request.URL + buildQueryFromPayload(request.data)); } else if (request.type === 'post') { result = await cetms.safe.post(request.URL, request.data); } resolve(result); } catch (error) { reject(error); } }).catch(error => { reject(error); }); } }); return promise; }; //#region Teachers /*------------------------------------------------------------------------------*/ const getTeacherStudents = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Teachers/GetStudents', data: requestData, validationParams: ['teacherId'] }); }; /*------------------------------------------------------------------------------*/ const getTeacherTasks = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Teachers/GetTasks', data: requestData, validationParams: ['teacherId'] }); }; /*------------------------------------------------------------------------------*/ const getTeacherLightTasks = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Teachers/GetLightTasks', data: requestData, validationParams: ['teacherId'] }); }; /*------------------------------------------------------------------------------*/ const getTeacherFullTask = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Teachers/GetFullTask', data: requestData, validationParams: ['teacherId', 'taskId'] }); }; /*------------------------------------------------------------------------------*/ const getTeacherTasksByIds = (requestData) => { return processRequest({ type: 'post', URL: settings.apiUrl + 'Teachers/GetTasksByIds', data: requestData, validationParams: ['teacherId', 'taskIds'] }); }; //#endregion //#region Students /*------------------------------------------------------------------------------*/ const getStudentTasks = (requestData) => { return processRequest({ type: 'get', URL: settings.apiUrl + 'Students/GetTasks', data: requestData, validationParams: ['studentId'] }); }; /*------------------------------------------------------------------------------*/ //#endregion return { 'teachers': { getStudents: getTeacherStudents, getTasks: getTeacherTasks, getLightTasks: getTeacherLightTasks, getFullTask: getTeacherFullTask, getTasksByIds: getTeacherTasksByIds }, 'students': { getTasks: getStudentTasks } }; })();