🚑️ Wait for client connect

This commit is contained in:
2022-03-22 22:52:20 +03:00
parent 6c1d62b389
commit c14bfcc1e1

View File

@@ -21,7 +21,12 @@ const names = require('./names.json');
const client = new MongoClient(process.env.URI, { useUnifiedTopology: true }); const client = new MongoClient(process.env.URI, { useUnifiedTopology: true });
app.use(session({ (async () => {
await client.connect();
const cardsCollection = client.db(process.env.DB_NAME).collection('cards');
const answersCollection = client.db(process.env.DB_NAME).collection('answers');
app.use(session({
secret: process.env.SECRET, secret: process.env.SECRET,
resave: false, resave: false,
saveUninitialized: true, saveUninitialized: true,
@@ -33,15 +38,12 @@ app.use(session({
secure: false, secure: false,
maxAge: 1000 * 60 * 60 * 24, maxAge: 1000 * 60 * 60 * 24,
}, },
})); }));
client.connect(); // Выравнивание вероятности
const cardsCollection = client.db(process.env.DB_NAME).collection('cards'); // Объект хранящий вероятности с которой карта каждого участника отбрасывается
const answersCollection = client.db(process.env.DB_NAME).collection('answers'); const dropProb = {};
cardsCollection.aggregate([
// Выравнивание вероятности
const dropProb = {}; // Объект хранящий вероятности с которой карта каждого участника отбрасывается
cardsCollection.aggregate([
{ {
$group: { $group: {
_id: '$name', _id: '$name',
@@ -50,7 +52,7 @@ cardsCollection.aggregate([
}, },
}, },
}, },
]).toArray().then((memeCount) => { ]).toArray().then((memeCount) => {
cardsCollection.countDocuments().then((totalCount) => { cardsCollection.countDocuments().then((totalCount) => {
let quotaTimes; let quotaTimes;
@@ -77,9 +79,9 @@ cardsCollection.aggregate([
console.log(`${person._id} [${person.count}]: ${dropProb[person._id]}`); console.log(`${person._id} [${person.count}]: ${dropProb[person._id]}`);
}); });
}); });
}); });
app.post('/api/auth', async (req, res) => { app.post('/api/auth', async (req, res) => {
if (req.session.loggedIn) { if (req.session.loggedIn) {
res.status(200).send('Logged in'); res.status(200).send('Logged in');
} else { } else {
@@ -96,9 +98,9 @@ app.post('/api/auth', async (req, res) => {
res.status(500).send(); res.status(500).send();
} }
} }
}); });
app.get('/api/card', async (req, res) => { app.get('/api/card', async (req, res) => {
async function drawCard() { async function drawCard() {
let card; let card;
// Тянем карты и отбрасываем их в соответствии с их вероятностью отбрасывания // Тянем карты и отбрасываем их в соответствии с их вероятностью отбрасывания
@@ -122,9 +124,9 @@ app.get('/api/card', async (req, res) => {
} else { } else {
res.status(403).send(); res.status(403).send();
} }
}); });
app.get('/api/meme', async (req, res) => { app.get('/api/meme', async (req, res) => {
const amount = Number(req.query.amount) || 1; const amount = Number(req.query.amount) || 1;
try { try {
let cards = await cardsCollection.aggregate([{ $sample: { size: amount } }]).toArray(); let cards = await cardsCollection.aggregate([{ $sample: { size: amount } }]).toArray();
@@ -135,9 +137,9 @@ app.get('/api/meme', async (req, res) => {
console.log(`Error: ${e}`); console.log(`Error: ${e}`);
res.status(500).send(); res.status(500).send();
} }
}); });
app.post('/api/answer', async (req, res) => { app.post('/api/answer', async (req, res) => {
if (req.session.loggedIn) { if (req.session.loggedIn) {
if (req.body.data.id && req.body.data.name) { if (req.body.data.id && req.body.data.name) {
const card = await cardsCollection.findOne({ _id: ObjectId(req.body.data.id) }); const card = await cardsCollection.findOne({ _id: ObjectId(req.body.data.id) });
@@ -165,9 +167,9 @@ app.post('/api/answer', async (req, res) => {
} else { } else {
res.status(403).send(); res.status(403).send();
} }
}); });
app.get('/api/score', (req, res) => { app.get('/api/score', (req, res) => {
if (req.session.loggedIn) { if (req.session.loggedIn) {
req.session.right = req.session.right || 0; req.session.right = req.session.right || 0;
req.session.wrong = req.session.wrong || 0; req.session.wrong = req.session.wrong || 0;
@@ -179,9 +181,9 @@ app.get('/api/score', (req, res) => {
} else { } else {
res.status(403).send(); res.status(403).send();
} }
}); });
app.get('/api/stats', async (req, res) => { app.get('/api/stats', async (req, res) => {
if (req.session.loggedIn) { if (req.session.loggedIn) {
answersCollection.aggregate([ answersCollection.aggregate([
{ {
@@ -207,14 +209,15 @@ app.get('/api/stats', async (req, res) => {
} else { } else {
res.status(403).send(); res.status(403).send();
} }
}); });
app.get('/api/options', async (req, res) => { app.get('/api/options', async (req, res) => {
if (req.session.loggedIn) { if (req.session.loggedIn) {
res.status(200).send(names); res.status(200).send(names);
} else { } else {
res.status(403).send(); res.status(403).send();
} }
}); });
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}`));
})();