# Тестовая отправка Push-уведомлений ## Что добавлено В админ-панели теперь есть кнопка **"🧪 Тест Push-уведомления"** с подробным логированием всего процесса отправки. ### Backend endpoint **POST** `/api/notifications/test-push` - ✅ Требует авторизацию (Bearer token) - ✅ Требует права администратора (`isAdmin: true`) - ✅ Подробное логирование каждого шага ### Frontend кнопка Расположена в **Админ-панели** (правый верхний угол). ## Логирование ### Backend логи (консоль сервера) ``` 🧪 [TEST PUSH] Запрос от пользователя: { userId: 1, username: 'admin' } ✅ [TEST PUSH] Пользователь является админом, продолжаем... 📊 [TEST PUSH] Найдено подписок для пользователя 1: 2 📱 Подписка 1: { id: 123, endpoint: 'https://fcm.googleapis...', userAgent: 'Mozilla/5.0...', ... } 📱 Подписка 2: { id: 124, endpoint: 'https://fcm.googleapis...', userAgent: 'Chrome...', ... } 📝 [TEST PUSH] Создаём тестовое уведомление в БД... ✅ [TEST PUSH] Уведомление создано в БД: 456 📤 [TEST PUSH] Отправляем Push-уведомление... ✅ [TEST PUSH] Push-уведомление успешно отправлено! ``` ### Frontend логи (консоль браузера) ``` 🧪 [FRONTEND] Начинаем тестовую отправку Push-уведомления... 📝 [FRONTEND] Токен найден: Да 📤 [FRONTEND] Отправляем запрос на: https://ospab.host:5000/api/notifications/test-push ✅ [FRONTEND] Ответ от сервера: { success: true, message: '...', data: { notificationId: 456, subscriptionsCount: 2 } } 📊 [FRONTEND] Детали: { notificationId: 456, subscriptionsCount: 2 } ``` ## Как использовать ### 1. Включите Push-уведомления 1. Перейдите в **Дашборд → Уведомления** 2. Нажмите **"Включить уведомления"** (синяя кнопка) 3. Разрешите уведомления в браузере 4. Дождитесь сообщения **"Push-уведомления успешно подключены!"** ### 2. Откройте админ-панель 1. Перейдите в **Дашборд → Админ-панель** (👑 иконка в сайдбаре) 2. В правом верхнем углу увидите кнопку **"🧪 Тест Push-уведомления"** ### 3. Нажмите кнопку 1. Откройте **DevTools → Console** (F12) 2. Нажмите **"🧪 Тест Push-уведомления"** 3. Следите за логами в консоли браузера ### 4. Проверьте сервер Откройте консоль сервера (SSH): ```bash pm2 logs ospab-backend --lines 50 ``` Увидите подробные логи с эмодзи-маркерами. ### 5. Проверьте результат Через несколько секунд должно прийти Push-уведомление: - **Заголовок:** 🧪 Тестовое уведомление - **Текст:** Это тестовое Push-уведомление. Если вы его видите — всё работает отлично! - **Иконка:** /logo192.png - **Клик:** Перенаправляет на /dashboard/notifications ## Возможные ошибки ### ❌ "У вас нет прав администратора" (403) **Причина:** Пользователь не является администратором. **Решение:** ```sql UPDATE User SET isAdmin = 1 WHERE id = YOUR_USER_ID; ``` ### ❌ "У вас нет активных Push-подписок" (400) **Причина:** Push-уведомления не включены. **Решение:** 1. Перейдите в **Дашборд → Уведомления** 2. Нажмите **"Включить уведомления"** 3. Разрешите в браузере 4. Попробуйте снова ### ❌ "Уведомление создано в БД, но ошибка при отправке Push" (500) **Причины:** 1. Неправильные VAPID ключи 2. Подписка устарела 3. Проблема с web-push библиотекой **Решение:** **Проверьте VAPID ключи:** ```bash cd /var/www/ospab-host/backend cat .env | grep VAPID ``` Должны быть заполнены: ``` VAPID_PUBLIC_KEY=BPtLNi3TY1ifUWTkgZrhxoEH6ihDgknFcgzc3xzFQg07PeuJ1TsJDQZqA32VqlxUo03g_mG0yKCKqADb4r5fnsM VAPID_PRIVATE_KEY=5uEJBxEzCLhcMBPyGEw_GDx9JDneb6poZiX8f3b0zNE VAPID_SUBJECT=mailto:support@ospab.host ``` **Пересоздайте подписку:** 1. Удалите старую: `DELETE FROM PushSubscription WHERE userId = YOUR_USER_ID;` 2. Перейдите в **Дашборд → Уведомления** 3. Включите уведомления заново ### ❌ 410 Gone - Подписка устарела **Причина:** Push подписка больше недействительна (браузер её отозвал). **Решение:** Сервис автоматически удаляет устаревшие подписки. Пересоздайте подписку (см. выше). ## Диагностика проблем ### Проверка подписок в БД ```sql SELECT ps.id, ps.userId, ps.endpoint, ps.userAgent, ps.createdAt, ps.lastUsed, u.username FROM PushSubscription ps JOIN User u ON ps.userId = u.id ORDER BY ps.createdAt DESC; ``` ### Проверка уведомлений в БД ```sql SELECT * FROM Notification WHERE type = 'test' ORDER BY createdAt DESC LIMIT 10; ``` ### Проверка Service Worker 1. Откройте сайт в браузере 2. DevTools (F12) → Application → Service Workers 3. Должен быть зарегистрирован `/service-worker.js` со статусом **Activated** ### Проверка VAPID ключа через API ```bash curl https://ospab.host:5000/api/notifications/vapid-key \ -H "Authorization: Bearer YOUR_TOKEN" ``` Должен вернуть: ```json { "success": true, "publicKey": "BPtLNi3TY1ifUWTkgZrhxoEH6ihDgknFcgzc3xzFQg07PeuJ1TsJDQZqA32VqlxUo03g_mG0yKCKqADb4r5fnsM" } ``` ## Что логируется ### Backend | Эмодзи | Описание | |--------|----------| | 🧪 | Начало тестовой отправки | | ✅ | Успешный этап | | ❌ | Ошибка | | 📊 | Статистика/данные | | 📱 | Информация о подписке | | 📝 | Создание записи | | 📤 | Отправка | | ⚠️ | Предупреждение | ### Frontend | Эмодзи | Описание | |--------|----------| | 🧪 | Начало процесса | | 📝 | Проверка данных | | 📤 | Отправка запроса | | ✅ | Успешный ответ | | ❌ | Ошибка | | 📊 | Детали ответа | | 📋 | Детали ошибки | ## Ручная отправка через код Если нужно отправить тестовое уведомление программно: ```typescript import { sendPushNotification } from './modules/notification/push.service'; // В любом месте backend кода await sendPushNotification(userId, { title: 'Заголовок', body: 'Текст уведомления', icon: '/logo192.png', badge: '/favicon.svg', data: { notificationId: 123, actionUrl: '/dashboard' } }); ``` ## Файлы изменены 1. ✅ `backend/src/modules/notification/notification.controller.ts` - Добавлен `testPushNotification()` с подробным логированием 2. ✅ `backend/src/modules/notification/notification.routes.ts` - Добавлен роут `POST /api/notifications/test-push` 3. ✅ `frontend/src/pages/dashboard/admin.tsx` - Добавлена кнопка тестовой отправки - Добавлен `handleTestPushNotification()` с логированием - Состояние `testingPush` для индикации загрузки ## Деплой ```bash # Backend cd /var/www/ospab-host/backend npm run build pm2 restart ospab-backend # Frontend cd /var/www/ospab-host/frontend npm run build # Скопируйте dist/ в web root # Проверка логов pm2 logs ospab-backend --lines 100 ``` --- **Статус:** ✅ Готово к тестированию **Дата:** 2025-11-01