BIG_UPDATE deleted vps, added s3 infrastructure.
This commit is contained in:
264
ospabhost/TEST_PUSH_NOTIFICATION.md
Normal file
264
ospabhost/TEST_PUSH_NOTIFICATION.md
Normal file
@@ -0,0 +1,264 @@
|
||||
# Тестовая отправка 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
|
||||
Reference in New Issue
Block a user