email and fix
This commit is contained in:
210
server.js
210
server.js
@@ -551,6 +551,214 @@ app.get('/admin', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public/admin.html'));
|
||||
});
|
||||
|
||||
// API для получения настроек уведомлений пользователя
|
||||
app.get('/api/user/settings', requireAuth, async (req, res) => {
|
||||
try {
|
||||
if (!req.session.user || !req.session.user.id) {
|
||||
return res.status(401).json({ error: 'Не аутентифицирован' });
|
||||
}
|
||||
|
||||
const userId = req.session.user.id;
|
||||
const { getDb } = require('./database');
|
||||
const db = getDb();
|
||||
|
||||
db.get("SELECT email_notifications, notification_email, telegram_notifications, telegram_chat_id, vk_notifications, vk_user_id FROM user_settings WHERE user_id = ?",
|
||||
[userId],
|
||||
(err, settings) => {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка получения настроек:', err);
|
||||
return res.status(500).json({ error: 'Ошибка получения настроек' });
|
||||
}
|
||||
|
||||
if (!settings) {
|
||||
// Возвращаем настройки по умолчанию
|
||||
res.json({
|
||||
email_notifications: true,
|
||||
notification_email: req.session.user.email || '',
|
||||
telegram_notifications: false,
|
||||
telegram_chat_id: '',
|
||||
vk_notifications: false,
|
||||
vk_user_id: ''
|
||||
});
|
||||
} else {
|
||||
// Преобразуем boolean из SQLite (0/1) в true/false
|
||||
const result = {
|
||||
email_notifications: !!settings.email_notifications,
|
||||
notification_email: settings.notification_email || '',
|
||||
telegram_notifications: !!settings.telegram_notifications,
|
||||
telegram_chat_id: settings.telegram_chat_id || '',
|
||||
vk_notifications: !!settings.vk_notifications,
|
||||
vk_user_id: settings.vk_user_id || ''
|
||||
};
|
||||
res.json(result);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка получения настроек:', error);
|
||||
res.status(500).json({ error: 'Ошибка получения настроек' });
|
||||
}
|
||||
});
|
||||
|
||||
// API для сохранения настроек уведомлений
|
||||
app.post('/api/user/settings', requireAuth, async (req, res) => {
|
||||
try {
|
||||
if (!req.session.user || !req.session.user.id) {
|
||||
return res.status(401).json({ error: 'Не аутентифицирован' });
|
||||
}
|
||||
|
||||
const userId = req.session.user.id;
|
||||
const {
|
||||
email_notifications,
|
||||
notification_email,
|
||||
telegram_notifications,
|
||||
telegram_chat_id,
|
||||
vk_notifications,
|
||||
vk_user_id
|
||||
} = req.body;
|
||||
|
||||
// Валидация
|
||||
if (email_notifications === undefined ||
|
||||
telegram_notifications === undefined ||
|
||||
vk_notifications === undefined) {
|
||||
return res.status(400).json({
|
||||
error: 'Не все обязательные поля заполнены'
|
||||
});
|
||||
}
|
||||
|
||||
const { getDb } = require('./database');
|
||||
const db = getDb();
|
||||
|
||||
// Проверяем, есть ли уже настройки для пользователя
|
||||
db.get("SELECT id FROM user_settings WHERE user_id = ?", [userId], (err, existing) => {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка проверки настроек:', err);
|
||||
return res.status(500).json({ error: 'Ошибка сохранения настроек' });
|
||||
}
|
||||
|
||||
if (existing) {
|
||||
// Обновляем существующие настройки
|
||||
db.run(
|
||||
`UPDATE user_settings SET
|
||||
email_notifications = ?,
|
||||
notification_email = ?,
|
||||
telegram_notifications = ?,
|
||||
telegram_chat_id = ?,
|
||||
vk_notifications = ?,
|
||||
vk_user_id = ?,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE user_id = ?`,
|
||||
[
|
||||
email_notifications ? 1 : 0,
|
||||
notification_email || '',
|
||||
telegram_notifications ? 1 : 0,
|
||||
telegram_chat_id || '',
|
||||
vk_notifications ? 1 : 0,
|
||||
vk_user_id || '',
|
||||
userId
|
||||
],
|
||||
function(updateErr) {
|
||||
if (updateErr) {
|
||||
console.error('❌ Ошибка обновления настроек:', updateErr);
|
||||
return res.status(500).json({ error: 'Ошибка сохранения настроек' });
|
||||
}
|
||||
|
||||
console.log(`✅ Настройки пользователя ${userId} обновлены`);
|
||||
res.json({ success: true });
|
||||
}
|
||||
);
|
||||
} else {
|
||||
// Создаем новые настройки
|
||||
db.run(
|
||||
`INSERT INTO user_settings
|
||||
(user_id, email_notifications, notification_email,
|
||||
telegram_notifications, telegram_chat_id,
|
||||
vk_notifications, vk_user_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
||||
[
|
||||
userId,
|
||||
email_notifications ? 1 : 0,
|
||||
notification_email || '',
|
||||
telegram_notifications ? 1 : 0,
|
||||
telegram_chat_id || '',
|
||||
vk_notifications ? 1 : 0,
|
||||
vk_user_id || ''
|
||||
],
|
||||
function(insertErr) {
|
||||
if (insertErr) {
|
||||
console.error('❌ Ошибка создания настроек:', insertErr);
|
||||
return res.status(500).json({ error: 'Ошибка сохранения настроек' });
|
||||
}
|
||||
|
||||
console.log(`✅ Настройки пользователя ${userId} созданы`);
|
||||
res.json({ success: true });
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка сохранения настроек:', error);
|
||||
res.status(500).json({ error: 'Ошибка сохранения настроек' });
|
||||
}
|
||||
});
|
||||
|
||||
// API для проверки настроек
|
||||
app.get('/api/user/settings/check', requireAuth, (req, res) => {
|
||||
try {
|
||||
if (!req.session.user || !req.session.user.id) {
|
||||
return res.status(401).json({ error: 'Не аутентифицирован' });
|
||||
}
|
||||
|
||||
const userId = req.session.user.id;
|
||||
const { getDb } = require('./database');
|
||||
const db = getDb();
|
||||
|
||||
db.get("SELECT COUNT(*) as count FROM user_settings WHERE user_id = ?", [userId], (err, result) => {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка проверки таблицы:', err);
|
||||
return res.json({
|
||||
table_exists: false,
|
||||
user_has_settings: false,
|
||||
error: err.message
|
||||
});
|
||||
}
|
||||
|
||||
res.json({
|
||||
table_exists: true,
|
||||
user_has_settings: result.count > 0,
|
||||
user_id: userId
|
||||
});
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка проверки настроек:', error);
|
||||
res.status(500).json({ error: 'Ошибка проверки настроек' });
|
||||
}
|
||||
});
|
||||
|
||||
// API для проверки email уведомлений
|
||||
app.get('/api/email-health', requireAuth, async (req, res) => {
|
||||
try {
|
||||
if (req.session.user.role !== 'admin') {
|
||||
return res.status(403).json({ error: 'Недостаточно прав' });
|
||||
}
|
||||
|
||||
const emailNotifications = require('./email-notifications');
|
||||
const health = {
|
||||
ready: emailNotifications.isReady(),
|
||||
email: process.env.YANDEX_EMAIL,
|
||||
host: process.env.YANDEX_SMTP_HOST,
|
||||
timestamp: new Date().toISOString()
|
||||
};
|
||||
|
||||
res.json(health);
|
||||
} catch (error) {
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
// Инициализация сервера
|
||||
async function initializeServer() {
|
||||
console.log('🚀 Инициализация сервера...');
|
||||
@@ -612,7 +820,7 @@ async function initializeServer() {
|
||||
app.use(stubRouter);
|
||||
console.log('⚠️ Создана заглушка для админ роутера из-за ошибки');
|
||||
}
|
||||
|
||||
|
||||
// 7. Помечаем сервер как готовый
|
||||
serverReady = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user