From cdd01b70de7cb86329c2457b559c7e7d804b6aaf Mon Sep 17 00:00:00 2001 From: mrfry Date: Wed, 31 Mar 2021 20:22:13 +0200 Subject: [PATCH] Moved qminingapi submodule, added pagination to forum posts --- src/modules/api/submodules/forum.ts | 65 +++++++++++++++---- .../submodules/{qmining.ts => qminingapi.ts} | 32 +++++---- src/utils/classes.ts | 2 +- 3 files changed, 71 insertions(+), 28 deletions(-) rename src/modules/api/submodules/{qmining.ts => qminingapi.ts} (98%) diff --git a/src/modules/api/submodules/forum.ts b/src/modules/api/submodules/forum.ts index 69e87b5..ac59085 100644 --- a/src/modules/api/submodules/forum.ts +++ b/src/modules/api/submodules/forum.ts @@ -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, diff --git a/src/modules/api/submodules/qmining.ts b/src/modules/api/submodules/qminingapi.ts similarity index 98% rename from src/modules/api/submodules/qmining.ts rename to src/modules/api/submodules/qminingapi.ts index 0d370a8..4c3c07d 100644 --- a/src/modules/api/submodules/qmining.ts +++ b/src/modules/api/submodules/qminingapi.ts @@ -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({ diff --git a/src/utils/classes.ts b/src/utils/classes.ts index efc4dbe..05a72b3 100755 --- a/src/utils/classes.ts +++ b/src/utils/classes.ts @@ -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 */