🛂 Перенес проверку ответа на backend

This commit is contained in:
2022-01-13 00:02:29 +03:00
parent 847ebae182
commit 393cbfdf8d
4 changed files with 53 additions and 25 deletions

View File

@@ -6,6 +6,5 @@
### Todo: ### Todo:
- Собирать в БД не только картинки, но и репосты и видео - Собирать в БД не только картинки, но и репосты и видео
- Переместить определение правильности ответа на сервер
- Вынести контрольный вопрос и название игры в `.env`, как вынесен пароль - Вынести контрольный вопрос и название игры в `.env`, как вынесен пароль
- Записывать статистику ответов как n документов, соответствующих возможным вариантам ответа - Записывать статистику ответов как n документов, соответствующих возможным вариантам ответа

View File

@@ -1,6 +1,7 @@
PORT=Порт, например 3000 NODE_ENV=production
URI=Адрес базы данных PORT=3031
FRONTEND=Адрес откуда будут поступать запросы URI=mongodb://localhost?retryWrites=true&w=majority
DB_NAME=Имя базы данных FRONTEND=https://bingo.anatolykopyl.ru
SECRET=Секретное слово для сессии DB_NAME=vk_bingo
PASSWORD=Ответ на вопрос на странице авторизации SECRET=secretword
PASSWORD=pass

View File

@@ -1,7 +1,7 @@
const express = require('express') const express = require('express')
const session = require('express-session') const session = require('express-session')
const app = express() const app = express()
const {MongoClient} = require('mongodb') const { MongoClient, ObjectId } = require('mongodb')
const MongoStore = require('connect-mongo') const MongoStore = require('connect-mongo')
const cors = require('cors') const cors = require('cors')
require('dotenv').config() require('dotenv').config()
@@ -9,7 +9,6 @@ require('dotenv').config()
app.use(cors({ app.use(cors({
origin: [ origin: [
process.env.FRONTEND, process.env.FRONTEND,
process.env.FRONTEND_HTTPS
], ],
credentials: true, credentials: true,
exposedHeaders: ['set-cookie'] exposedHeaders: ['set-cookie']
@@ -102,7 +101,13 @@ app.get('/api/card', async (req, res) => {
let card let card
// Тянем карты и отбрасываем их в соответствии с их вероятностью отбрасывания // Тянем карты и отбрасываем их в соответствии с их вероятностью отбрасывания
do { do {
card = await cardsCollection.aggregate([{ $sample: { size: 1 } }]).toArray() card = await cardsCollection.aggregate([
{
$sample: { size: 1 }
}, {
$unset: [ 'name', 'link', 'date' ]
}
]).toArray()
card = card[0] card = card[0]
} while (Math.random() < dropProb[card.name]) } while (Math.random() < dropProb[card.name])
res.status(200).send(card) res.status(200).send(card)
@@ -130,21 +135,40 @@ app.get('/api/meme', async (req, res) => {
} }
}) })
app.post('/api/answer', (req, res) => { app.post('/api/answer', async (req, res) => {
if (req.session.loggedIn) { if (req.session.loggedIn) {
if (req.body.data.correct) { if (req.body.data.id && req.body.data.name) {
const card = await cardsCollection.findOne({ _id: ObjectId(req.body.data.id) })
if (card) {
if (card.name === req.body.data.name) {
req.session.right++ req.session.right++
answersCollection.insertOne({
correct: true,
selected: req.body.data.name
})
res.status(200).send({
correct: true,
name: card.name,
date: card.date
})
} else { } else {
req.session.wrong++ req.session.wrong++
answersCollection.insertOne({
correct: false,
selected: req.body.data.name
})
res.status(200).send({
correct: false,
name: card.name,
date: card.date
})
} }
} else {
try {
answersCollection.insertOne(req.body.data)
res.status(200).send()
} catch (e) {
console.log("Error: " + e)
res.status(500).send() res.status(500).send()
} }
} else {
res.status(400).send()
}
} else { } else {
res.status(403).send() res.status(403).send()
} }

View File

@@ -69,7 +69,6 @@ export default {
} }
}, },
selectAnswer: function(selection) { selectAnswer: function(selection) {
this.correctAnswer = selection === this.card.name
this.selectedAnswer = selection this.selectedAnswer = selection
let innerThis = this let innerThis = this
setTimeout(function() { setTimeout(function() {
@@ -84,10 +83,15 @@ export default {
axios axios
.post(process.env.VUE_APP_BACKEND + '/answer', { .post(process.env.VUE_APP_BACKEND + '/answer', {
'data': { 'data': {
'correct': this.correctAnswer, 'id': this.card._id,
'selected': this.selectedAnswer 'name': this.selectedAnswer
} }
}) })
.then((response) => {
this.correctAnswer = response.data.correct
this.card.name = response.data.name
this.card.date = response.data.date
})
} }
}, },
mounted() { mounted() {