const request = require('requestretry') const env = require('./env.js') const logger = require('./logger.js')('api.js') async function execute(uri, method, form) { return new Promise((resolve, reject) => { request({ url: 'http://' + env.server.host + uri, method: method, json: true, timeout: 10000, form: form || {}, headers: { 'auth-info': 'loginname=' + env.loginName + ';password=' + env.password }, maxAttempts: 50, retryDelay: 500, retryStrategy: request.RetryStrategies.HTTPOrNetworkError }, function (error, response, body) { if (response.statusCode == 200) { resolve(body); } else { let message = response.statusCode + ' ' + (error || '') + (response.headers['error-info'] || '') logger.error(message) reject(message) } }) }) } module.exports.login = function () { return execute('/api/user/login', 'GET'); } module.exports.getExams = function (pageNumber, pageSize) { let uri = '/api/exams' let param = []; if (pageNumber != undefined) { param.push('pageNumber=' + pageNumber) } if (pageSize != undefined) { param.push('pageSize=' + pageSize) } if (param.length > 0) { uri = uri + '?' + param.join('&') } return execute(uri, 'GET'); } module.exports.getStudents = function (examId, pageNumber, pageSize, params) { let form = { examId: examId, pageNumber: pageNumber, pageSize: pageSize } if (params != undefined) { for (let key in params) { if (params[key] && params[key] != '') { form[key] = params[key] } } } return execute('/api/exam/students', 'POST', form); } module.exports.countStudents = function (examId, upload, absent) { let uri = '/api/students/count/' + examId let param = [] if (upload != undefined) { param.push('upload=' + (upload ? 'true' : 'false')) } if (absent != undefined) { param.push('absent=' + (absent ? 'true' : 'false')) } if (param.length > 0) { uri = uri + '?' + param.join('&') } return execute(uri, 'GET') } module.exports.getPackages = function (examId, upload, withUrl) { let uri = '/api/package/count/' + examId let param = [] if (upload != undefined) { param.push('upload=' + (upload ? 'true' : 'false')) } if (withUrl != undefined) { param.push('withUrl=' + (withUrl ? 'true' : 'false')) } if (param.length > 0) { uri = uri + '?' + param.join('&') } return execute(uri, 'GET') }