mirror of
https://github.com/anatolykopyl/vk-bingo.git
synced 2026-03-26 04:44:26 +00:00
🛂 Перенес проверку ответа на backend
This commit is contained in:
@@ -6,6 +6,5 @@
|
|||||||
|
|
||||||
### Todo:
|
### Todo:
|
||||||
- Собирать в БД не только картинки, но и репосты и видео
|
- Собирать в БД не только картинки, но и репосты и видео
|
||||||
- Переместить определение правильности ответа на сервер
|
|
||||||
- Вынести контрольный вопрос и название игры в `.env`, как вынесен пароль
|
- Вынести контрольный вопрос и название игры в `.env`, как вынесен пароль
|
||||||
- Записывать статистику ответов как n документов, соответствующих возможным вариантам ответа
|
- Записывать статистику ответов как n документов, соответствующих возможным вариантам ответа
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user