Moved qminingapi submodule, added pagination to forum posts

This commit is contained in:
mrfry 2021-03-31 20:22:13 +02:00
parent 7010d5e8ba
commit cdd01b70de
3 changed files with 71 additions and 28 deletions

View file

@ -84,7 +84,7 @@ function addReaction(obj, path, { reaction, isDelete, uid }) {
function getForumData(
forumName: string,
forumDir: string
): { forumPath: string; contentFilePath: string; content: any } {
): { forumPath: string; contentFilePath: string; contents: any } {
const safeForumName = forumName.replace(/\./g, '').replace(/\/+/g, '')
const forumPath = forumDir + '/' + safeForumName
const contentFilePath = forumPath + '/' + forumContentsFileName
@ -126,7 +126,6 @@ function setup(data: SubmoduleData): void {
app.get('/forumEntries', (req: Request, res) => {
logger.LogReq(req)
const forumName: any = req.query.forumName
if (!forumName) {
res.json({
@ -138,9 +137,41 @@ function setup(data: SubmoduleData): void {
const { forumPath, contents } = getForumData(forumName, forumDir)
const from = req.query.from || Object.keys(contents).reverse()[0]
const count = parseInt(req.query.count ? req.query.count.toString() : '5')
const getContent = req.query.getContent
let entries = {}
let i = 0
let passed = false
let lastKey = undefined
Object.keys(contents)
.reverse()
.some((key) => {
const entry = getContent
? utils.ReadJSON(forumPath + '/' + key)
: contents[key]
if (key === from) {
passed = true
}
if (i < count && passed) {
entries = {
...entries,
[key]: entry,
}
}
if (i === count) {
lastKey = key
return true
}
if (passed) {
i++
}
})
res.json({
entriesPath: forumPath.replace(publicDir, ''),
contents: contents,
entries: entries,
nextKey: lastKey,
})
})
@ -148,7 +179,7 @@ function setup(data: SubmoduleData): void {
logger.LogReq(req)
const { title, content } = req.body
const forumName: any = req.query.forumName
const forumName: any = req.body.forumName
if (!forumName) {
res.json({
success: false,
@ -156,7 +187,10 @@ function setup(data: SubmoduleData): void {
})
return
}
const { contents } = getForumData(forumName, forumDir)
const { forumPath, contents, contentFilePath } = getForumData(
forumName,
forumDir
)
const user: User = req.session.user
const admins: any = utils.FileExists(adminUsersFile)
? utils.ReadJSON(adminUsersFile)
@ -172,18 +206,23 @@ function setup(data: SubmoduleData): void {
}
contents[newPostKey] = postData
utils.WriteFile(JSON.stringify(contents, null, 2), contentFilePath)
utils.WriteFile(
JSON.stringify({ ...postData, content: content }),
newPostKey + '.json'
forumPath + '/' + newPostKey
)
res.json({ success: true, newEntry: { ...postData, content: content } })
res.json({
success: true,
newPostKey: newPostKey,
newEntry: { ...postData, content: content },
})
})
app.post('/rmPost', (req: Request, res) => {
logger.LogReq(req)
const { postKey } = req.body
const forumName: any = req.query.forumName
const forumName: any = req.body.forumName
if (!forumName) {
res.json({
success: false,
@ -198,7 +237,7 @@ function setup(data: SubmoduleData): void {
const user: User = req.session.user
if (contents[postKey] && contents[postKey].user === user.id) {
utils.deleteFile(forumPath + '/' + postKey + '.json')
utils.deleteFile(forumPath + '/' + postKey)
delete contents[postKey]
utils.WriteFile(JSON.stringify(contents), contentFilePath)
@ -216,7 +255,7 @@ function setup(data: SubmoduleData): void {
app.post('/comment', (req: Request, res) => {
logger.LogReq(req)
const forumName: any = req.query.forumName
const forumName: any = req.body.forumName
if (!forumName) {
res.json({
success: false,
@ -279,13 +318,13 @@ function setup(data: SubmoduleData): void {
utils.WriteFile(JSON.stringify(postData, null, 2), postPath)
utils.WriteFile(JSON.stringify(contents, null, 2), contentFilePath)
res.json({ success: true, postData: postData })
res.json({ success: true, postKey: postKey, postData: postData })
})
app.post('/react', (req: Request, res) => {
logger.LogReq(req)
const forumName: any = req.query.forumName
const forumName: any = req.body.forumName
if (!forumName) {
res.json({
success: false,

View file

@ -176,14 +176,8 @@ function searchInDbs(
})
}
function getResult(
question,
subj,
recData,
recievedData,
questionDbs,
testUrl?
) {
function getResult(data) {
const { question, subj, recData, recievedData, questionDbs, testUrl } = data
return new Promise((resolve) => {
const searchIn = getDbIndexesToSearchIn(testUrl, questionDbs, false)
@ -590,7 +584,13 @@ function setup(data: SubmoduleData): any {
// every question in a different thread
const resultPromises = req.body.questions.map((question) => {
return getResult(question, subj, null, req.body, testUrl, questionDbs)
return getResult({
question: question,
subj: subj,
recData: req.body,
testUrl: testUrl,
questionDbs: questionDbs,
})
})
Promise.all(resultPromises).then((results) => {
@ -637,11 +637,15 @@ function setup(data: SubmoduleData): any {
const subj: any = req.query.subj || ''
const question = req.query.q
const recData: any = req.query.data
getResult(question, subj, recData, req.query, questionDbs).then(
(result) => {
res.json(result)
}
)
getResult({
question: question,
subj: subj,
recData: recData,
recievedData: req.query,
questionDbs: questionDbs,
}).then((result) => {
res.json(result)
})
} else {
logger.DebugLog(`Invalid question`, 'ask', 1)
res.json({

View file

@ -32,7 +32,7 @@ const commonUselessAnswerParts = [
/* Percent minus for length difference */
const lengthDiffMultiplier = 10
/* Minimum ammount to consider that two questions match during answering */
const minMatchAmmount = 70
const minMatchAmmount = 75
const magicNumber = 0.7 // same as minMatchAmmount, but /100
/* If all of the results are below this match percent (when only one subject is searched due to
* subject name matching) then all subjects are searched for answer */