refactor: Удален Telegram из новой системы уведомлений

- Убрана поддержка Telegram из каналов доставки
- Удалено telegram_enabled из UserChannelPreferences
- Обновлена документация
- Сфокусировались на WebSocket, Email и Web Push

Фокус: веб-уведомления, email дайджесты и web push
This commit is contained in:
lizerk 2026-03-09 16:01:29 +03:00
parent b7d36559b3
commit f4fa00d9bd
6 changed files with 10 additions and 77 deletions

View File

@ -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()
# Отключить определенный тип

View File

@ -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)
✅ **Переиспользуемее** - готов к использованию в других проектах
**Рекомендация:** Внедрять немедленно.

View File

@ -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
Требуется:

View File

@ -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',
)
}),

View File

@ -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 уведомления

View File

@ -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