Merge pull request 'kazan-explore changes' (#75) from kazan-explore into master

Reviewed-on: #75
This commit is contained in:
Kamila Nazirova 2025-01-31 18:03:08 +03:00
commit 922909397d
2 changed files with 90 additions and 40 deletions

View File

@ -1,3 +1,3 @@
exports.KAZAN_EXPLORE_RESULTS_MODEL_NAME = 'KAZAN_EXPLORE_RESULTS'
exports.TOKEN_KEY = "KAZAN_EXPLORE_TOP_SECRET_TOKEN_KEY"
exports.TOKEN_KEY = "kazan-explore_top_secret_key_hbfhqf9jq9prg"

View File

@ -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;