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?withSchoolList=true', 'GET'); } module.exports.getExams = function(pageNumber, pageSize, schoolId) { let uri = '/api/exams' let param = []; if (pageNumber != undefined) { param.push('pageNumber=' + pageNumber) } if (pageSize != undefined) { param.push('pageSize=' + pageSize) } if (schoolId != undefined) { param.push('schoolId=' + schoolId) } if (param.length > 0) { uri = uri + '?' + param.join('&') } return execute(uri, 'GET'); } module.exports.getStudents = function(examId, pageNumber, pageSize, upload, absent, withScoreDetail, withMarkTrack) { let form = { examId: examId, pageNumber: pageNumber, pageSize: pageSize } if (upload != undefined) { form.upload = upload } if (absent != undefined) { form.absent = absent } if (withScoreDetail != undefined) { form.withScoreDetail = withScoreDetail } if (withMarkTrack != undefined) { form.withMarkTrack = withMarkTrack } 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) { let uri = '/api/package/count/' + examId if (upload != undefined) { uri = uri + '?upload=' + (upload ? 'true' : false) } return execute(uri, 'GET'); }