Files
DLE/backend/routes/users.js

117 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;