Проблема: - Монолитный notification_signals.py (~310 строк) смешивал разные concerns - Сложная логика с упоминаниями, ответами и обычными сообщениями в одном файле - Множество вспомогательных функций без четкой структуры Решение: Разделен на модульную структуру communications/notifications/: - config.py - NotificationVerbs, MessageTemplates, ActionURLs, вспомогательные функции (extract_mentions, truncate_message, get_chat_name) - handlers.py - notify_new_message(), notify_chat_added(), get_users_with_notifications_enabled() - signals.py - Django signal receivers (@receiver) - __init__.py - публичный API модуля Изменения: - Создан: communications/notifications/ модуль с 4 файлами - Переименован: notification_signals.py → notification_signals.py.old - Изменен: apps.py - обновлен импорт на communications.notifications Логика уведомлений: 1. Упоминания (@email) - высокий приоритет 2. Ответы на сообщения - средний приоритет 3. Обычные сообщения - низкий приоритет Преимущества: - ✅ Единообразие с requests_app, procurement, feed - ✅ Четкое разделение ответственности (SRP) - ✅ ОПТИМИЗАЦИЯ: Настройки уведомлений загружаются одним запросом - ✅ Легче тестировать компоненты - ✅ Публичный API для переиспользования функций - ✅ Централизованные шаблоны сообщений Верификация: - python manage.py check - успешно
20 lines
790 B
Python
20 lines
790 B
Python
# backend\communications\apps.py
|
|
from django.apps import AppConfig
|
|
|
|
|
|
class CommunicationsConfig(AppConfig):
|
|
default_auto_field = "django.db.models.BigAutoField"
|
|
name = "communications"
|
|
|
|
def ready(self):
|
|
import communications.signals
|
|
import communications.notifications # Модуль уведомлений (signals регистрируются автоматически)
|
|
import communications.rules # django-rules: регистрация предикатов и правил доступа
|
|
|
|
def create_main_global_chat(sender, **kwargs):
|
|
from communications.models import Chat
|
|
|
|
if not Chat.objects.filter(type="global", is_main=True).exists():
|
|
Chat.objects.create(type="global", is_main=True)
|
|
|