refactor: Удален Telegram из новой системы уведомлений
- Убрана поддержка Telegram из каналов доставки - Удалено telegram_enabled из UserChannelPreferences - Обновлена документация - Сфокусировались на WebSocket, Email и Web Push Фокус: веб-уведомления, email дайджесты и web push
This commit is contained in:
parent
b7d36559b3
commit
f4fa00d9bd
@ -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()
|
||||
|
||||
# Отключить определенный тип
|
||||
|
||||
@ -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)
|
||||
✅ **Переиспользуемее** - готов к использованию в других проектах
|
||||
|
||||
**Рекомендация:** Внедрять немедленно.
|
||||
|
||||
@ -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
|
||||
|
||||
Требуется:
|
||||
|
||||
@ -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',
|
||||
)
|
||||
}),
|
||||
|
||||
@ -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 уведомления
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user