# Система уведомлений ## Обзор Реализована комплексная система уведомлений для отслеживания критических событий и важных изменений в системе. ## Типы уведомлений ### 1. Критические риски - **Триггер:** Риск с уровнем "Критический" и статусом "Требует внимания" - **Приоритет:** Critical - **Действия:** Email уведомление, звуковой сигнал, push-уведомление ### 2. Предстоящие аудиты - **Триггер:** Аудит запланирован на ближайший месяц - **Приоритет:** High (≤7 дней) / Medium (>7 дней) - **Действия:** Email уведомление за месяц и за неделю до аудита ### 3. Истекающие документы - **Триггер:** Документ истекает в течение 30 дней - **Приоритет:** High (≤7 дней) / Medium (>7 дней) - **Действия:** Email уведомление ### 4. Изменения статусов ВС - **Триггер:** Статус ВС изменен (особенно на "На обслуживании") - **Приоритет:** High (если "На обслуживании") / Medium - **Действия:** Уведомление в интерфейсе ## Компоненты ### NotificationBell Компонент иконки уведомлений в шапке приложения: - Отображает количество непрочитанных уведомлений - Пульсирующий индикатор для критических уведомлений - Открывает центр уведомлений при клике ### NotificationCenter Модальное окно с списком всех уведомлений: - Группировка по приоритету (критические сверху) - Цветовая индикация приоритета - Переход к связанным страницам при клике - Автоматическое воспроизведение звука для критических уведомлений ## API Endpoints ### GET /api/notifications Получение всех уведомлений для текущего пользователя. **Ответ:** ```json { "notifications": [ { "id": "risk-123", "type": "critical_risk", "title": "Критический риск требует внимания", "message": "Описание риска", "priority": "critical", "createdAt": "2025-01-22T10:00:00Z", "read": false, "actionUrl": "/risks?id=123" } ], "count": 10, "unreadCount": 3 } ``` ### POST /api/notifications/[id]/read Отметить уведомление как прочитанное. ### POST /api/notifications/email Отправка email уведомления. **Тело запроса:** ```json { "type": "critical_risk", "userEmail": "user@example.com", "riskTitle": "Название риска", "aircraftRegistration": "RA-12345", "riskId": "123" } ``` ## Настройка ### Email уведомления Добавьте в `.env.local`: ```env EMAIL_SERVICE_ENABLED=true SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_USER=your-email@example.com SMTP_PASSWORD=your-password EMAIL_FROM=noreply@example.com ``` Для использования Nodemailer: ```bash npm install nodemailer npm install --save-dev @types/nodemailer ``` ### Push уведомления Добавьте в `.env.local`: ```env PUSH_NOTIFICATIONS_ENABLED=true VAPID_EMAIL=your-email@example.com VAPID_PRIVATE_KEY=your-private-key ``` И в `.env` (публичные переменные): ```env NEXT_PUBLIC_VAPID_PUBLIC_KEY=your-public-key ``` Для использования Web Push: ```bash npm install web-push ``` Генерация VAPID ключей: ```bash npx web-push generate-vapid-keys ``` ### Звуковые сигналы Добавьте аудио файлы в `public/sounds/`: - `alert-critical.mp3` - для критических уведомлений - `alert-critical.ogg` - альтернативный формат Рекомендуемые источники: - [freesound.org](https://freesound.org) - [zapsplat.com](https://www.zapsplat.com) ## Интеграция ### Добавление NotificationBell в layout ```tsx import NotificationBell from '@/components/NotificationBell'; // В шапке приложения ``` ### Автоматическая проверка уведомлений Уведомления автоматически обновляются каждые 5 минут. Для более частых обновлений измените интервал в `NotificationBell.tsx`: ```tsx const interval = setInterval(loadNotifications, 1 * 60 * 1000); // Каждую минуту ``` ## Кастомизация ### Приоритеты Можно настроить цвета и иконки приоритетов в `NotificationCenter.tsx`: ```tsx const getPriorityColor = (priority: string) => { switch (priority) { case 'critical': return '#f44336'; case 'high': return '#ff9800'; // ... } }; ``` ### Звуки Для разных типов уведомлений можно использовать разные звуки: ```tsx ``` ## Безопасность - Rate limiting на всех API endpoints - Проверка прав доступа перед отправкой email - Валидация данных перед отправкой push-уведомлений - Логирование всех отправленных уведомлений ## Производительность - Кэширование уведомлений на клиенте - Пагинация для большого количества уведомлений - Ленивая загрузка звуковых файлов - Оптимизация запросов к БД