diff --git a/backend/docs/guides/NOTIFICATIONS_V2_USAGE.md b/backend/docs/guides/NOTIFICATIONS_V2_USAGE.md index 46a10275..3b913e6f 100644 --- a/backend/docs/guides/NOTIFICATIONS_V2_USAGE.md +++ b/backend/docs/guides/NOTIFICATIONS_V2_USAGE.md @@ -27,7 +27,7 @@ ✅ **Проста** - 2 модели вместо 6 ✅ **Универсальна** - GenericForeignKey для любых объектов ✅ **Стандартна** - API как в django-notifications-hq -✅ **Multi-channel** - WebSocket, Email, Telegram, Push +✅ **Multi-channel** - WebSocket, Email, Push ✅ **Переиспользуема** - можно использовать в других проектах ✅ **Современна** - Django 5.2+ совместима @@ -68,7 +68,6 @@ System (actor) approved (verb) your request (action_object) **Поля:** - `web_enabled` - веб уведомления (bool) - `email_enabled` - email уведомления (bool) -- `telegram_enabled` - Telegram уведомления (bool) - `push_enabled` - Web Push уведомления (bool) - `email_frequency` - частота email: instant/daily/weekly - `dnd_enabled` - режим "Не беспокоить" (bool) @@ -78,7 +77,7 @@ System (actor) approved (verb) your request (action_object) ### Компоненты 1. **signals_new.py** - `notify.send()` API для создания уведомлений -2. **channels.py** - роутинг по каналам доставки (WebSocket, Email, Telegram, Push) +2. **channels.py** - роутинг по каналам доставки (WebSocket, Email, Push) 3. **models_new.py** - модели с QuerySet методами 4. **admin_new.py** - Django Admin интерфейс @@ -414,7 +413,6 @@ prefs, created = UserChannelPreferences.objects.get_or_create( defaults={ 'web_enabled': True, 'email_enabled': True, - 'telegram_enabled': False, 'push_enabled': True, 'email_frequency': 'instant', } @@ -429,7 +427,7 @@ prefs = user.channel_preferences # Изменить каналы prefs.email_enabled = True -prefs.telegram_enabled = True +prefs.push_enabled = True prefs.save() # Отключить определенный тип diff --git a/backend/docs/reports/NOTIFICATIONS_REFACTORING_REPORT.md b/backend/docs/reports/NOTIFICATIONS_REFACTORING_REPORT.md index 18259243..45f5c71c 100644 --- a/backend/docs/reports/NOTIFICATIONS_REFACTORING_REPORT.md +++ b/backend/docs/reports/NOTIFICATIONS_REFACTORING_REPORT.md @@ -13,10 +13,12 @@ - ✅ Универсализации (переиспользуемое решение) - ✅ Стандартизации API (как в django-notifications-hq) - ✅ Совместимости с Django 5.2+ -- ✅ Сохранения multi-channel функционала +- ✅ Сохранения multi-channel функционала (Web, Email, Push) **Результат:** Создана современная универсальная система уведомлений, готовая к использованию. +**Каналы доставки:** WebSocket, Email, Web Push + --- ## 🎯 Проблема @@ -89,7 +91,6 @@ - user: OneToOneField - web_enabled: bool - email_enabled: bool -- telegram_enabled: bool - push_enabled: bool - email_frequency: 'instant'|'daily'|'weekly' - dnd_enabled: bool (Do Not Disturb) @@ -134,7 +135,6 @@ notify.send( **Функционал:** - WebSocket (realtime) через Django Channels - Email (instant/daily/weekly digest) -- Telegram через TelegramNotificationSender - Web Push через django-push-notifications **Логика:** @@ -502,7 +502,7 @@ notification.mark_as_read() ✅ **Стандартнее** - API как в django-notifications-hq ✅ **Универсальнее** - GenericForeignKey для любых объектов ✅ **Современнее** - Django 5.2+ совместимость -✅ **Функциональнее** - сохранен multi-channel функционал +✅ **Функциональнее** - сохранен multi-channel (Web, Email, Push) ✅ **Переиспользуемее** - готов к использованию в других проектах **Рекомендация:** Внедрять немедленно. diff --git a/backend/notifications/README.md b/backend/notifications/README.md index bcfb7251..5670a0ea 100644 --- a/backend/notifications/README.md +++ b/backend/notifications/README.md @@ -6,7 +6,7 @@ - 🎯 **Простота** - 2 модели вместо 6 - 🔄 **Универсальность** - GenericForeignKey для любых объектов -- 📡 **Multi-channel** - WebSocket, Email, Telegram, Web Push +- 📡 **Multi-channel** - WebSocket, Email, Web Push - ⚡ **Производительность** - оптимизированные индексы и QuerySet - 🎨 **Гибкость** - легко расширяется под любые нужды - 🏗️ **Архитектура** - по образу django-notifications-hq @@ -133,7 +133,6 @@ prefs = user.channel_preferences # Включить/выключить каналы prefs.email_enabled = True -prefs.telegram_enabled = True prefs.push_enabled = False prefs.save() @@ -170,12 +169,6 @@ from notifications.channels import send_email_digest send_email_digest(user, frequency='daily') ``` -### Telegram - -Требуется: -- Модель `TelegramUser` с настроенной интеграцией -- `telegram_enabled=True` в настройках - ### Web Push Требуется: diff --git a/backend/notifications/admin_new.py b/backend/notifications/admin_new.py index 4fed33af..b2c19d1d 100644 --- a/backend/notifications/admin_new.py +++ b/backend/notifications/admin_new.py @@ -202,7 +202,6 @@ class UserChannelPreferencesAdmin(admin.ModelAdmin): 'user', 'web_enabled', 'email_enabled', - 'telegram_enabled', 'push_enabled', 'email_frequency', 'dnd_enabled', @@ -212,7 +211,6 @@ class UserChannelPreferencesAdmin(admin.ModelAdmin): list_filter = [ 'web_enabled', 'email_enabled', - 'telegram_enabled', 'push_enabled', 'email_frequency', 'dnd_enabled', @@ -233,7 +231,6 @@ class UserChannelPreferencesAdmin(admin.ModelAdmin): 'fields': ( 'web_enabled', 'email_enabled', - 'telegram_enabled', 'push_enabled', ) }), diff --git a/backend/notifications/channels.py b/backend/notifications/channels.py index 9cb1383d..47c3b211 100644 --- a/backend/notifications/channels.py +++ b/backend/notifications/channels.py @@ -3,8 +3,7 @@ Слушают post_save сигнал от Notification и отправляют по каналам: - WebSocket (realtime) -- Email -- Telegram +- Email - Web Push """ @@ -59,9 +58,6 @@ def handle_notification_channels(sender, instance, created, **kwargs): if prefs.email_enabled and prefs.email_frequency == 'instant': send_email_notification(notification) - if prefs.telegram_enabled: - send_telegram_notification(notification) - if prefs.push_enabled: send_push_notification(notification) @@ -166,51 +162,6 @@ def send_email_notification(notification): logger.error(f'Failed to send email notification: {e}', exc_info=True) -def send_telegram_notification(notification): - """ - Отправка Telegram уведомления - - Args: - notification: Объект Notification - """ - try: - from .telegram_models import TelegramUser - from .telegram_sender import TelegramNotificationSender - - user = notification.recipient - - # Проверяем, есть ли у пользователя Telegram - try: - telegram_user = TelegramUser.objects.get(user=user, is_active=True) - except TelegramUser.DoesNotExist: - logger.debug(f'User {user.id} has no active Telegram account') - return - - # Формируем сообщение - actor_str = str(notification.actor) if notification.actor else 'Система' - message = f"🔔 {actor_str} {notification.verb}" - - if notification.description: - message += f"\n{notification.description}" - - if notification.action_url: - site_url = settings.SITE_URL if hasattr(settings, 'SITE_URL') else 'http://localhost:8000' - full_url = f"{site_url}{notification.action_url}" - message += f"\n\n🔗 {full_url}" - - # Отправляем - sender = TelegramNotificationSender() - sender.send( - chat_id=telegram_user.telegram_id, - message=message, - ) - - logger.info(f'Telegram notification sent to user {user.id}') - - except Exception as e: - logger.error(f'Failed to send Telegram notification: {e}', exc_info=True) - - def send_push_notification(notification): """ Отправка Web Push уведомления diff --git a/backend/notifications/models_new.py b/backend/notifications/models_new.py index 5e26a6cc..176ceb6d 100644 --- a/backend/notifications/models_new.py +++ b/backend/notifications/models_new.py @@ -6,7 +6,7 @@ - Одна модель Notification вместо 6 - GenericForeignKey для универсальности - Простой API через сигналы -- Multi-channel поддержка +- Multi-channel поддержка (Web, Email, Push) """ from django.db import models @@ -303,11 +303,6 @@ class UserChannelPreferences(models.Model): verbose_name='Email уведомления' ) - telegram_enabled = models.BooleanField( - default=False, - verbose_name='Telegram уведомления' - ) - push_enabled = models.BooleanField( default=False, verbose_name='Push уведомления', @@ -414,5 +409,4 @@ class UserChannelPreferences(models.Model): # === Переэкспорт моделей которые остаются без изменений === -from .telegram_models import TelegramUser # noqa: F401, E402 from .web_push_models import WebPushSubscription # noqa: F401, E402