From 233192ba0172fc4819d06721a4bf91b9584f916d Mon Sep 17 00:00:00 2001 From: Kamila Nazirova Date: Fri, 31 Jan 2025 18:00:56 +0300 Subject: [PATCH] kazan-explore changes --- server/routers/kazan-explore/const.js | 2 +- server/routers/kazan-explore/index.js | 128 ++++++++++++++++++-------- 2 files changed, 90 insertions(+), 40 deletions(-) diff --git a/server/routers/kazan-explore/const.js b/server/routers/kazan-explore/const.js index 633fa7a..b6694ea 100644 --- a/server/routers/kazan-explore/const.js +++ b/server/routers/kazan-explore/const.js @@ -1,3 +1,3 @@ exports.KAZAN_EXPLORE_RESULTS_MODEL_NAME = 'KAZAN_EXPLORE_RESULTS' -exports.TOKEN_KEY = "KAZAN_EXPLORE_TOP_SECRET_TOKEN_KEY" \ No newline at end of file +exports.TOKEN_KEY = "kazan-explore_top_secret_key_hbfhqf9jq9prg" \ No newline at end of file diff --git a/server/routers/kazan-explore/index.js b/server/routers/kazan-explore/index.js index b74f5b5..e3527d8 100644 --- a/server/routers/kazan-explore/index.js +++ b/server/routers/kazan-explore/index.js @@ -1,44 +1,9 @@ const router = require('express').Router(); +const { expressjwt } = require('express-jwt') +const axios = require('axios'); +const jwt = require('jsonwebtoken') const { ResultsModel } = require('./model/results') - - - -router.get('/getQuizResults/:userId', async (request, response) => { - const { userId } = request.params; - - try { - const results = await ResultsModel.findOne({ userId : userId }).exec(); - - if (!results) { - return response.status(404).send({ message: 'Quiz results not found' }); - } - - response.send(results.items); - } catch (error) { - response.status(500).send({ message: 'An error occurred while fetching quiz results' }); - } -}); - -router.post('/addQuizResult', async (request, response) => { - const { userId, quizId, result } = request.body; - - if (!userId || !quizId || !result) { - return response.status(400).send({ message: 'Invalid input data' }); - } - try { - let userResults = await ResultsModel.findOne({ userId : userId }).exec(); - if (!userResults) { - userResults = new ResultsModel({ userId, items: [] }); - } - userResults.items.push({ quizId, result }); - await userResults.save(); - - response.status(200).send({ message: 'Quiz result added successfully', data: userResults }); - } catch (error) { - response.status(500).send({ message: 'An error occurred while adding quiz result' }); - } -}); - +const { TOKEN_KEY } = require('./const') // First page router.get('/getInfoAboutKazan', (request, response) => { @@ -247,4 +212,89 @@ router.post('/registration', async (request, response) => { } }); +router.post('/signin', async (req, res) => { + const { user } = req.body + + if (!user || !user.token) { + return res.status(404).json({error : "No user found"}); + } + + const valRes = await axios.get('https://antd-table-v2-backend.onrender.com/api/auth/check', + { + headers: { + 'authorization': `Bearer ${user.token}` + } + } + ) + + if (valRes.status !== 200) { + return res.status(401).json({error : "User authorization error"}); + } + + const accessToken = jwt.sign({ + ...JSON.parse(JSON.stringify(user._id)), + }, TOKEN_KEY, { + expiresIn: '12h' + }) + user.token = accessToken; + res.json(user) +}) + +router.use( + expressjwt({ + secret: TOKEN_KEY, + algorithms: ['HS256'], + getToken: function fromHeaderOrQuerystring(req) { + if (req.headers.authorization && req.headers.authorization.split(" ")[0] === "Bearer") + return req.headers.authorization.split(" ")[1]; + else if (req.query && req.query.token) + return req.query.token; + + return null; + } + }) +) + +router.get('/getQuizResults/:userId', async (request, response) => { + const { userId } = request.params; + + try { + const results = await ResultsModel.findOne({ userId: userId }).exec(); + + if (!results) + return response.status(404).send({ message: 'Quiz results not found' }); + + response.send(results.items); + } catch (error) { + response.status(500).send({ message: 'An error occurred while fetching quiz results' }); + } +}); + +router.post('/addQuizResult', async (request, response) => { + const { userId, quizId, result } = request.body; + + if (!userId || !quizId || !result) + return response.status(400).send({ message: 'Invalid input data' }); + + try { + let userResults = await ResultsModel.findOne({ userId: userId }).exec(); + if (!userResults) { + userResults = new ResultsModel({ userId, items: [] }); + } + const itemToOverride = userResults.items.find(item => item.quizId === quizId) + if (!itemToOverride) { + userResults.items.push({ quizId, result }); + } + else { + itemToOverride.result = result; + } + + await userResults.save(); + + response.status(200).send({ message: 'Quiz result added successfully' }); + } catch (error) { + response.status(500).send({ message: 'An error occurred while adding quiz result' }); + } +}); + module.exports = router; -- 2.45.2