import express from 'express'; import emailService from '../services/emailService.js'; import { pool } from '../config/db.js'; import { authenticateToken } from '../middleware/auth.js'; const router = express.Router(); // Отправка уведомления о низком остатке router.post('/low-stock', authenticateToken, async (req, res) => { try { const { items } = req.body; if (!items || !Array.isArray(items)) { return res.status(400).json({ error: 'Необходимо указать список товаров' }); } // Получаем пользователей с включенными уведомлениями const users = await emailService.getUsersWithNotifications('lowStockAlerts'); const results = []; for (const user of users) { try { const result = await emailService.sendLowStockAlert(user, items); results.push({ userId: user.id, email: user.email, status: 'success', messageId: result.messageId }); } catch (error) { results.push({ userId: user.id, email: user.email, status: 'error', error: error.message }); } } res.json({ message: 'Уведомления о низком остатке отправлены', results }); } catch (error) { console.error('Ошибка отправки уведомлений о низком остатке:', error); res.status(500).json({ error: 'Ошибка отправки уведомлений' }); } }); // Отправка уведомления об операции router.post('/operation', authenticateToken, async (req, res) => { try { const { operation } = req.body; if (!operation) { return res.status(400).json({ error: 'Необходимо указать данные операции' }); } // Получаем пользователей с включенными уведомлениями const users = await emailService.getUsersWithNotifications('emailNotifications'); const results = []; for (const user of users) { try { const result = await emailService.sendOperationNotification(user, operation); results.push({ userId: user.id, email: user.email, status: 'success', messageId: result.messageId }); } catch (error) { results.push({ userId: user.id, email: user.email, status: 'error', error: error.message }); } } res.json({ message: 'Уведомления об операции отправлены', results }); } catch (error) { console.error('Ошибка отправки уведомлений об операции:', error); res.status(500).json({ error: 'Ошибка отправки уведомлений' }); } }); // Отправка еженедельного отчета router.post('/weekly-report', authenticateToken, async (req, res) => { try { const { report } = req.body; if (!report) { return res.status(400).json({ error: 'Необходимо указать данные отчета' }); } // Получаем пользователей с включенными уведомлениями const users = await emailService.getUsersWithNotifications('operationReports'); const results = []; for (const user of users) { try { const result = await emailService.sendWeeklyReport(user, report); results.push({ userId: user.id, email: user.email, status: 'success', messageId: result.messageId }); } catch (error) { results.push({ userId: user.id, email: user.email, status: 'error', error: error.message }); } } res.json({ message: 'Еженедельные отчеты отправлены', results }); } catch (error) { console.error('Ошибка отправки еженедельных отчетов:', error); res.status(500).json({ error: 'Ошибка отправки отчетов' }); } }); // Тестовая отправка email router.post('/test', authenticateToken, async (req, res) => { try { const { email, subject, message } = req.body; if (!email || !subject || !message) { return res.status(400).json({ error: 'Необходимо указать email, subject и message' }); } const testUser = { id: 1, name: 'Тестовый пользователь', email: email }; const result = await emailService.sendEmail({ to: email, subject: subject, html: `
${message}
Это тестовое уведомление от системы управления складом.
Дата: ${new Date().toLocaleString('ru-RU')}