301 lines
9.8 KiB
JavaScript
301 lines
9.8 KiB
JavaScript
const router = require('express').Router();
|
||
const { expressjwt } = require('express-jwt')
|
||
const axios = require('axios');
|
||
const jwt = require('jsonwebtoken')
|
||
const { ResultsModel } = require('./model/results')
|
||
const { TOKEN_KEY } = require('./const')
|
||
|
||
// First page
|
||
router.get('/getInfoAboutKazan', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require('./json/first/info-about-kazan/success.json');
|
||
const translatedData = data[lang] || data['ru'];
|
||
response.send(translatedData);
|
||
} catch (error) {
|
||
response.status(500).send({ message: 'Internal server error' });
|
||
}
|
||
});
|
||
|
||
router.get('/getNews', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/first/news/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
// Sport page
|
||
router.get('/getFirstText', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require('./json/sport/first-text/success.json');
|
||
const translatedData = data[lang] || data['ru'];
|
||
response.send(translatedData);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
});
|
||
|
||
router.get('/getSecondText', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require('./json/sport/second-text/success.json');
|
||
const translatedData = data[lang] || data['ru'];
|
||
response.send(translatedData);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
});
|
||
|
||
router.get('/getSportData', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/sport/sport-list/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
router.get('/getSportQuiz', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/sport/quiz/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
// Places page
|
||
router.get('/getPlacesData', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/places/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
// Transport page
|
||
router.get('/getInfoAboutTransportPage', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require('./json/transport/info-about-page/success.json');
|
||
const translatedData = data[lang] || data['ru'];
|
||
response.send(translatedData);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
router.get('/getBus', (request, response) => {
|
||
response.send(require('./json/transport/bus-numbers/success.json'))
|
||
})
|
||
|
||
router.get('/getTral', (request, response) => {
|
||
response.send(require('./json/transport/tral-numbers/success.json'))
|
||
})
|
||
|
||
router.get('/getEvents', (request, response) => {
|
||
response.send(require('./json/transport/events-calendar/success.json'))
|
||
})
|
||
|
||
router.get('/getTripSchedule', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/transport/trip-schedule/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
// History page
|
||
router.get('/getHistoryText', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/history/text/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
router.get('/getHistoryList', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/history/list/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
// Education page
|
||
router.get('/getInfoAboutEducation', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require('./json/education/text/success.json');
|
||
const translatedData = data[lang] || data['ru'];
|
||
response.send(translatedData);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
router.get('/getEducationList', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require(`./json/education/cards/${lang}/success.json`);
|
||
response.send(data);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
router.get('/getInfoAboutKFU', (request, response) => {
|
||
const lang = request.query.lang || 'ru';
|
||
try {
|
||
const data = require('./json/education/kfu/success.json');
|
||
const translatedData = data[lang] || data['ru'];
|
||
response.send(translatedData);
|
||
} catch (error) {
|
||
response.status(404).send({ message: 'Language not found' });
|
||
}
|
||
})
|
||
|
||
|
||
// Login
|
||
router.post('/entrance', (request, response) => {
|
||
const { email, password } = request.body.entranceData;
|
||
|
||
try {
|
||
const users = require('./json/users-information/success.json');
|
||
const user = users.data.find(user => user.email === email && user.password === password);
|
||
|
||
if (!user) {
|
||
return response.status(401).send('Неверные учетные данные');
|
||
}
|
||
|
||
const responseObject = {
|
||
email: user.email,
|
||
}
|
||
|
||
return response.json(responseObject);
|
||
} catch (error) {
|
||
console.error('Ошибка чтения файла:', error);
|
||
response.status(500).send('Внутренняя ошибка сервера');
|
||
}
|
||
})
|
||
|
||
router.post('/registration', async (request, response) => {
|
||
const { email, password, confirmPassword } = request.body.registerData;
|
||
|
||
try {
|
||
if (password !== confirmPassword) {
|
||
return response.status(400).send('Пароли не совпадают!');
|
||
}
|
||
const users = require('./json/users-information/success.json');
|
||
|
||
const existingUser = users.data.find(user => user.email === email);
|
||
|
||
if (existingUser) {
|
||
return response.status(400).send('Пользователь с такой почтой уже существует!');
|
||
}
|
||
|
||
return response.json({ email: email });
|
||
} catch (error) {
|
||
console.error('Ошибка регистрации пользователя:', error);
|
||
response.status(500).send('Внутренняя ошибка сервера');
|
||
}
|
||
});
|
||
|
||
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;
|