email and fix

This commit is contained in:
2026-01-26 17:44:28 +05:00
parent 4985b4727b
commit 77122aa9ee
16 changed files with 3531 additions and 2330 deletions

210
server.js
View File

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