mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2025-04-01 20:24:18 +02:00
90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import logger from '../../../utils/logger'
|
|
import utils from '../../../utils/utils'
|
|
import { Request, SubmoduleData, User } from '../../../types/basicTypes'
|
|
|
|
const quickVoteResultsDir = 'stats/qvote'
|
|
const quickVotes = 'stats/qvote/votes.json'
|
|
|
|
function setup(data: SubmoduleData): void {
|
|
const { app /* userDB, url, publicdirs, moduleSpecificData */ } = data
|
|
|
|
app.get('/quickvote', (req: Request, res: any) => {
|
|
const key = req.query.key
|
|
const val: any = req.query.val
|
|
const user: User = req.session.user
|
|
|
|
if (!key || !val) {
|
|
res.render('votethank', {
|
|
results: 'error',
|
|
msg: 'no key or val query param!',
|
|
})
|
|
return
|
|
}
|
|
|
|
// FIXME: check vote type in file
|
|
let votes: any = {}
|
|
if (utils.FileExists(quickVotes)) {
|
|
votes = utils.ReadJSON(quickVotes)
|
|
} else {
|
|
logger.Log(
|
|
`No such vote "${key}", and quickVotes.json is missing ( #${user.id}: ${key}-${val} )`,
|
|
logger.GetColor('blue')
|
|
)
|
|
res.render('votethank', {
|
|
result: 'no such pool',
|
|
})
|
|
return
|
|
}
|
|
|
|
if (!votes.voteNames.includes(key)) {
|
|
logger.Log(
|
|
`No such vote "${key}" ( #${user.id}: ${key}-${val} )`,
|
|
logger.GetColor('blue')
|
|
)
|
|
res.render('votethank', {
|
|
result: 'no such pool',
|
|
})
|
|
return
|
|
}
|
|
|
|
const voteFile = quickVoteResultsDir + '/' + key + '.json'
|
|
|
|
let voteData = {
|
|
votes: {},
|
|
sum: {},
|
|
}
|
|
|
|
if (utils.FileExists(voteFile)) {
|
|
voteData = utils.ReadJSON(voteFile)
|
|
} else {
|
|
utils.CreatePath(quickVoteResultsDir)
|
|
}
|
|
|
|
const prevVote = voteData.votes[user.id]
|
|
|
|
voteData.votes[user.id] = val
|
|
if (voteData.sum[val]) {
|
|
voteData.sum[val]++
|
|
} else {
|
|
voteData.sum[val] = 1
|
|
}
|
|
if (prevVote) {
|
|
if (voteData.sum[prevVote]) {
|
|
voteData.sum[prevVote] -= 1
|
|
}
|
|
}
|
|
|
|
logger.Log(`Vote from #${user.id}: ${key}: ${val}`, logger.GetColor('blue'))
|
|
res.render('votethank', {
|
|
result: prevVote ? 'already voted' : 'success',
|
|
prevVote: prevVote,
|
|
msg: 'vote added',
|
|
})
|
|
|
|
utils.WriteFile(JSON.stringify(voteData), voteFile)
|
|
})
|
|
}
|
|
|
|
export default {
|
|
setup: setup,
|
|
}
|