mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2025-04-01 20:24:18 +02:00
Moved qminingapi submodule, added pagination to forum posts
This commit is contained in:
parent
7010d5e8ba
commit
cdd01b70de
3 changed files with 71 additions and 28 deletions
|
@ -84,7 +84,7 @@ function addReaction(obj, path, { reaction, isDelete, uid }) {
|
||||||
function getForumData(
|
function getForumData(
|
||||||
forumName: string,
|
forumName: string,
|
||||||
forumDir: string
|
forumDir: string
|
||||||
): { forumPath: string; contentFilePath: string; content: any } {
|
): { forumPath: string; contentFilePath: string; contents: any } {
|
||||||
const safeForumName = forumName.replace(/\./g, '').replace(/\/+/g, '')
|
const safeForumName = forumName.replace(/\./g, '').replace(/\/+/g, '')
|
||||||
const forumPath = forumDir + '/' + safeForumName
|
const forumPath = forumDir + '/' + safeForumName
|
||||||
const contentFilePath = forumPath + '/' + forumContentsFileName
|
const contentFilePath = forumPath + '/' + forumContentsFileName
|
||||||
|
@ -126,7 +126,6 @@ function setup(data: SubmoduleData): void {
|
||||||
|
|
||||||
app.get('/forumEntries', (req: Request, res) => {
|
app.get('/forumEntries', (req: Request, res) => {
|
||||||
logger.LogReq(req)
|
logger.LogReq(req)
|
||||||
|
|
||||||
const forumName: any = req.query.forumName
|
const forumName: any = req.query.forumName
|
||||||
if (!forumName) {
|
if (!forumName) {
|
||||||
res.json({
|
res.json({
|
||||||
|
@ -138,9 +137,41 @@ function setup(data: SubmoduleData): void {
|
||||||
|
|
||||||
const { forumPath, contents } = getForumData(forumName, forumDir)
|
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({
|
res.json({
|
||||||
entriesPath: forumPath.replace(publicDir, ''),
|
entries: entries,
|
||||||
contents: contents,
|
nextKey: lastKey,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -148,7 +179,7 @@ function setup(data: SubmoduleData): void {
|
||||||
logger.LogReq(req)
|
logger.LogReq(req)
|
||||||
|
|
||||||
const { title, content } = req.body
|
const { title, content } = req.body
|
||||||
const forumName: any = req.query.forumName
|
const forumName: any = req.body.forumName
|
||||||
if (!forumName) {
|
if (!forumName) {
|
||||||
res.json({
|
res.json({
|
||||||
success: false,
|
success: false,
|
||||||
|
@ -156,7 +187,10 @@ function setup(data: SubmoduleData): void {
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const { contents } = getForumData(forumName, forumDir)
|
const { forumPath, contents, contentFilePath } = getForumData(
|
||||||
|
forumName,
|
||||||
|
forumDir
|
||||||
|
)
|
||||||
const user: User = req.session.user
|
const user: User = req.session.user
|
||||||
const admins: any = utils.FileExists(adminUsersFile)
|
const admins: any = utils.FileExists(adminUsersFile)
|
||||||
? utils.ReadJSON(adminUsersFile)
|
? utils.ReadJSON(adminUsersFile)
|
||||||
|
@ -172,18 +206,23 @@ function setup(data: SubmoduleData): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
contents[newPostKey] = postData
|
contents[newPostKey] = postData
|
||||||
|
utils.WriteFile(JSON.stringify(contents, null, 2), contentFilePath)
|
||||||
utils.WriteFile(
|
utils.WriteFile(
|
||||||
JSON.stringify({ ...postData, content: content }),
|
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) => {
|
app.post('/rmPost', (req: Request, res) => {
|
||||||
logger.LogReq(req)
|
logger.LogReq(req)
|
||||||
const { postKey } = req.body
|
const { postKey } = req.body
|
||||||
const forumName: any = req.query.forumName
|
const forumName: any = req.body.forumName
|
||||||
if (!forumName) {
|
if (!forumName) {
|
||||||
res.json({
|
res.json({
|
||||||
success: false,
|
success: false,
|
||||||
|
@ -198,7 +237,7 @@ function setup(data: SubmoduleData): void {
|
||||||
const user: User = req.session.user
|
const user: User = req.session.user
|
||||||
|
|
||||||
if (contents[postKey] && contents[postKey].user === user.id) {
|
if (contents[postKey] && contents[postKey].user === user.id) {
|
||||||
utils.deleteFile(forumPath + '/' + postKey + '.json')
|
utils.deleteFile(forumPath + '/' + postKey)
|
||||||
delete contents[postKey]
|
delete contents[postKey]
|
||||||
utils.WriteFile(JSON.stringify(contents), contentFilePath)
|
utils.WriteFile(JSON.stringify(contents), contentFilePath)
|
||||||
|
|
||||||
|
@ -216,7 +255,7 @@ function setup(data: SubmoduleData): void {
|
||||||
app.post('/comment', (req: Request, res) => {
|
app.post('/comment', (req: Request, res) => {
|
||||||
logger.LogReq(req)
|
logger.LogReq(req)
|
||||||
|
|
||||||
const forumName: any = req.query.forumName
|
const forumName: any = req.body.forumName
|
||||||
if (!forumName) {
|
if (!forumName) {
|
||||||
res.json({
|
res.json({
|
||||||
success: false,
|
success: false,
|
||||||
|
@ -279,13 +318,13 @@ function setup(data: SubmoduleData): void {
|
||||||
|
|
||||||
utils.WriteFile(JSON.stringify(postData, null, 2), postPath)
|
utils.WriteFile(JSON.stringify(postData, null, 2), postPath)
|
||||||
utils.WriteFile(JSON.stringify(contents, null, 2), contentFilePath)
|
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) => {
|
app.post('/react', (req: Request, res) => {
|
||||||
logger.LogReq(req)
|
logger.LogReq(req)
|
||||||
|
|
||||||
const forumName: any = req.query.forumName
|
const forumName: any = req.body.forumName
|
||||||
if (!forumName) {
|
if (!forumName) {
|
||||||
res.json({
|
res.json({
|
||||||
success: false,
|
success: false,
|
||||||
|
|
|
@ -176,14 +176,8 @@ function searchInDbs(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function getResult(
|
function getResult(data) {
|
||||||
question,
|
const { question, subj, recData, recievedData, questionDbs, testUrl } = data
|
||||||
subj,
|
|
||||||
recData,
|
|
||||||
recievedData,
|
|
||||||
questionDbs,
|
|
||||||
testUrl?
|
|
||||||
) {
|
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const searchIn = getDbIndexesToSearchIn(testUrl, questionDbs, false)
|
const searchIn = getDbIndexesToSearchIn(testUrl, questionDbs, false)
|
||||||
|
|
||||||
|
@ -590,7 +584,13 @@ function setup(data: SubmoduleData): any {
|
||||||
|
|
||||||
// every question in a different thread
|
// every question in a different thread
|
||||||
const resultPromises = req.body.questions.map((question) => {
|
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) => {
|
Promise.all(resultPromises).then((results) => {
|
||||||
|
@ -637,11 +637,15 @@ function setup(data: SubmoduleData): any {
|
||||||
const subj: any = req.query.subj || ''
|
const subj: any = req.query.subj || ''
|
||||||
const question = req.query.q
|
const question = req.query.q
|
||||||
const recData: any = req.query.data
|
const recData: any = req.query.data
|
||||||
getResult(question, subj, recData, req.query, questionDbs).then(
|
getResult({
|
||||||
(result) => {
|
question: question,
|
||||||
|
subj: subj,
|
||||||
|
recData: recData,
|
||||||
|
recievedData: req.query,
|
||||||
|
questionDbs: questionDbs,
|
||||||
|
}).then((result) => {
|
||||||
res.json(result)
|
res.json(result)
|
||||||
}
|
})
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
logger.DebugLog(`Invalid question`, 'ask', 1)
|
logger.DebugLog(`Invalid question`, 'ask', 1)
|
||||||
res.json({
|
res.json({
|
|
@ -32,7 +32,7 @@ const commonUselessAnswerParts = [
|
||||||
/* Percent minus for length difference */
|
/* Percent minus for length difference */
|
||||||
const lengthDiffMultiplier = 10
|
const lengthDiffMultiplier = 10
|
||||||
/* Minimum ammount to consider that two questions match during answering */
|
/* 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
|
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
|
/* 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 */
|
* subject name matching) then all subjects are searched for answer */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue