Added api to qmining

This commit is contained in:
MrFry 2020-01-24 20:06:19 +01:00
parent be935fac78
commit edc7ca16a3
2 changed files with 139 additions and 86 deletions

View file

@ -37,6 +37,7 @@ const uloadFiles = 'public/f'
const dataFile = 'public/data.json'
const msgFile = 'stats/msgs'
const motdFile = 'public/motd'
const versionFile = 'public/version'
let donateURL = ''
try {
donateURL = utils.ReadFile('./data/donateURL')
@ -64,6 +65,8 @@ app.use(bodyParser.json({
limit: '5mb'
}))
var data = actions.LoadJSON(dataFile)
// --------------------------------------------------------------
app.get('/', function (req, res) {
@ -90,14 +93,14 @@ app.get('/manual', function (req, res) {
})
app.get('/legacy', function (req, res) {
var f = utils.ReadFile(dataFile)
var d = actions.LoadJSON(f)
let qcount = 0
for (let i = 0; i < d.length; i++) { qcount += d.Subjects[i].length }
let scount = d.length
let qcount = data.Subjects.reduce((acc, currItem) => {
acc += currItem.length
return acc
}, 0)
let scount = data.length
res.render('alldata', {
data: d,
data: data,
scount: scount,
qcount: qcount,
siteurl: url
@ -116,13 +119,6 @@ app.get('/postfeedback', function (req, res) {
res.redirect('/')
})
app.post('/isAdding', function (req, res) {
res.end('OK')
logger.LogReq(req)
actions.ProcessIncomingRequest(req.body.datatoadd)
utils.WriteBackup()
})
app.get('/lred', function (req, res) {
res.redirect('/legacy')
res.end()
@ -226,6 +222,90 @@ app.route('/badtestsender').post(function (req, res, next) {
logger.LogReq(req)
})
// -------------------------------------------------------------------------------------------
// API
app.post('/isAdding', function (req, res) {
logger.LogReq(req)
let result = actions.ProcessIncomingRequest(req.body.datatoadd, data)
res.json({
success: result !== -1,
newQuestions: result
})
utils.WriteBackup() // TODO: write every n times / after n minutes
})
app.get('/q', function (req, res) {
logger.LogReq(req)
if (Object.keys(req.query).length === 0) {
res.send('ask something!')
} else {
if (req.query.q) {
let subj = req.query.subj || ''
let recData = {}
try {
recData = JSON.parse(req.query.data)
} catch (e) {
console.log(e) // TODO: normal error logging
}
let r = data.Search(decodeURIComponent(req.query.q), subj, recData)
res.json(r)
} else {
res.send('no key "q" in query' + JSON.stringify(req.query))
}
}
})
function getSimplreRes () {
return {
subjects: data.length,
questions: data.Subjects.reduce((acc, subj) => {
return acc + subj.length
}, 0)
}
}
function getDetailedRes () {
return data.Subjects.map((subj) => {
return {
name: subj.Name,
count: subj.length
}
})
}
app.get('/datacount', function (req, res) {
logger.LogReq(req)
if (req.query.detailed === 'all') {
res.json({
detailed: getDetailedRes(),
simple: getSimplreRes()
})
} else if (req.query.detailed) {
res.json(getDetailedRes())
} else {
res.json(getSimplreRes())
}
})
app.get('/infos', function (req, res) {
let result = {}
if (req.query.subjinfo) {
result.subjinfo = getSimplreRes()
}
// TODO: watch file, and global variable for motd version
if (req.query.version) {
result.version = utils.ReadFile(versionFile)
}
if (req.query.motd) {
result.motd = utils.ReadFile(motdFile)
}
logger.LogReq(req)
res.json(result)
})
// -------------------------------------------------------------------------------------------
app.get('*', function (req, res) {
res.status(404).render('404')
})