🎨 Извлечение функции

This commit is contained in:
2022-01-13 00:56:18 +03:00
parent f4e7a49df8
commit 9150fd813c

View File

@@ -51,21 +51,23 @@ cardsCollection.aggregate([
]).toArray().then((memeCount) => { ]).toArray().then((memeCount) => {
cardsCollection.countDocuments().then((totalCount) => { cardsCollection.countDocuments().then((totalCount) => {
let quota, quotaTimes let quota, quotaTimes
let activeUsers = 0
quota = totalCount/memeCount.length // Квота мемов на человека quota = totalCount/memeCount.length // Квота мемов на человека
console.log(totalCount + " мемов всего. Квота: " + quota) console.log(totalCount + " мемов всего. Квота: " + quota)
// Подсчет количества активных пользователей function activeUsers() {
memeCount.forEach((person) => { let activeUsers = 0
if (person.count > quota/10) memeCount.forEach((person) => {
activeUsers++ if (person.count > quota/10)
}) activeUsers++
})
return activeUsers
}
memeCount.forEach((person) => { memeCount.forEach((person) => {
// Во сколько раз превышена квота: // Во сколько раз превышена квота:
// (колич. астивных человек в конфе * колич. мемов данного человека / мемов всего) // (колич. астивных человек в конфе * колич. мемов данного человека / мемов всего)
quotaTimes = activeUsers*person.count/totalCount quotaTimes = activeUsers()*person.count/totalCount
if (quotaTimes > 1) { if (quotaTimes > 1) {
dropProb[person._id] = 1 - (1/quotaTimes) dropProb[person._id] = 1 - (1/quotaTimes)
} else { } else {
@@ -96,25 +98,24 @@ app.post('/api/auth', async (req, res) => {
}) })
app.get('/api/card', async (req, res) => { app.get('/api/card', async (req, res) => {
async function drawCard() {
let card
// Тянем карты и отбрасываем их в соответствии с их вероятностью отбрасывания
do {
card = await cardsCollection.aggregate([
{
$sample: { size: 1 }
}, {
$unset: [ 'name', 'link', 'date' ]
}
]).toArray()
card = card[0]
} while (Math.random() < dropProb[card.name])
return card
}
if (req.session.loggedIn) { if (req.session.loggedIn) {
try { res.status(200).send(await drawCard())
let card
// Тянем карты и отбрасываем их в соответствии с их вероятностью отбрасывания
do {
card = await cardsCollection.aggregate([
{
$sample: { size: 1 }
}, {
$unset: [ 'name', 'link', 'date' ]
}
]).toArray()
card = card[0]
} while (Math.random() < dropProb[card.name])
res.status(200).send(card)
} catch (e) {
console.log("Error: " + e)
res.status(500).send()
}
} else { } else {
res.status(403).send() res.status(403).send()
} }
@@ -215,4 +216,4 @@ app.get('/api/options', async (req, res) => {
} }
}) })
app.listen(process.env.PORT, () => console.log('Server started on ' + process.env.PORT)); app.listen(process.env.PORT, () => console.log('Server started on ' + process.env.PORT));