119 lines
4.0 KiB
JavaScript
119 lines
4.0 KiB
JavaScript
const express = require('express');
|
||
const router = express.Router();
|
||
const db = require('../db');
|
||
const logger = require('../utils/logger');
|
||
const { requireAuth } = require('../middleware/auth');
|
||
|
||
// Получение списка пользователей
|
||
router.get('/', (req, res) => {
|
||
res.json({ message: 'Users API endpoint' });
|
||
});
|
||
|
||
// Получение информации о пользователе
|
||
router.get('/:address', (req, res) => {
|
||
const { address } = req.params;
|
||
res.json({
|
||
address,
|
||
message: 'User details endpoint',
|
||
});
|
||
});
|
||
|
||
// Маршрут для обновления языка пользователя
|
||
router.post('/update-language', requireAuth, async (req, res) => {
|
||
try {
|
||
const { language } = req.body;
|
||
const userId = req.session.userId;
|
||
|
||
// Проверка валидности языка
|
||
const validLanguages = ['ru', 'en'];
|
||
if (!validLanguages.includes(language)) {
|
||
return res.status(400).json({ error: 'Неподдерживаемый язык' });
|
||
}
|
||
|
||
// Обновление языка в базе данных
|
||
await db.query(
|
||
'UPDATE users SET preferred_language = $1 WHERE id = $2',
|
||
[language, userId]
|
||
);
|
||
|
||
res.json({ success: true });
|
||
} catch (error) {
|
||
logger.error('Error updating language:', error);
|
||
res.status(500).json({ error: 'Внутренняя ошибка сервера' });
|
||
}
|
||
});
|
||
|
||
// Маршрут для обновления имени и фамилии пользователя
|
||
router.post('/update-profile', requireAuth, async (req, res) => {
|
||
try {
|
||
const { firstName, lastName } = req.body;
|
||
const userId = req.session.userId;
|
||
|
||
// Проверка валидности данных
|
||
if (firstName && firstName.length > 255) {
|
||
return res.status(400).json({ error: 'Имя слишком длинное (максимум 255 символов)' });
|
||
}
|
||
|
||
if (lastName && lastName.length > 255) {
|
||
return res.status(400).json({ error: 'Фамилия слишком длинная (максимум 255 символов)' });
|
||
}
|
||
|
||
// Обновление имени и фамилии в базе данных
|
||
await db.query(
|
||
'UPDATE users SET first_name = $1, last_name = $2 WHERE id = $3',
|
||
[firstName || null, lastName || null, userId]
|
||
);
|
||
|
||
res.json({ success: true });
|
||
} catch (error) {
|
||
logger.error('Error updating user profile:', error);
|
||
res.status(500).json({ error: 'Внутренняя ошибка сервера' });
|
||
}
|
||
});
|
||
|
||
// Маршрут для получения профиля пользователя
|
||
router.get('/profile/current', requireAuth, async (req, res) => {
|
||
try {
|
||
const userId = req.session.userId;
|
||
|
||
// Получение данных пользователя
|
||
const userResult = await db.query(
|
||
'SELECT id, username, first_name, last_name, role, status, created_at, preferred_language FROM users WHERE id = $1',
|
||
[userId]
|
||
);
|
||
|
||
if (userResult.rows.length === 0) {
|
||
return res.status(404).json({ error: 'Пользователь не найден' });
|
||
}
|
||
|
||
// Получение идентификаторов пользователя
|
||
const identitiesResult = await db.query(
|
||
'SELECT provider, provider_id FROM user_identities WHERE user_id = $1',
|
||
[userId]
|
||
);
|
||
|
||
const user = userResult.rows[0];
|
||
const identities = identitiesResult.rows.reduce((acc, identity) => {
|
||
acc[identity.provider] = identity.provider_id;
|
||
return acc;
|
||
}, {});
|
||
|
||
res.json({
|
||
id: user.id,
|
||
username: user.username,
|
||
firstName: user.first_name,
|
||
lastName: user.last_name,
|
||
role: user.role,
|
||
status: user.status,
|
||
createdAt: user.created_at,
|
||
preferredLanguage: user.preferred_language,
|
||
identities
|
||
});
|
||
} catch (error) {
|
||
logger.error('Error getting user profile:', error);
|
||
res.status(500).json({ error: 'Внутренняя ошибка сервера' });
|
||
}
|
||
});
|
||
|
||
module.exports = router;
|