Проблема: - Монолитный 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 - успешно
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
"""
|
||
Модуль уведомлений для Communications приложения.
|
||
|
||
Публичный API:
|
||
- NotificationVerbs - константы глаголов уведомлений
|
||
- MessageTemplates - шаблоны сообщений
|
||
- ActionURLs - генераторы URL-адресов
|
||
- extract_mentions - извлечение упоминаний из текста
|
||
- truncate_message - обрезка текста сообщения
|
||
- get_chat_name - получение названия чата
|
||
- get_users_with_notifications_enabled - проверка настроек уведомлений
|
||
|
||
Использование:
|
||
from communications.notifications import extract_mentions, get_chat_name
|
||
|
||
# В коде:
|
||
mentions = extract_mentions(message.content)
|
||
chat_name = get_chat_name(chat)
|
||
"""
|
||
|
||
from .config import (
|
||
NotificationVerbs,
|
||
MessageTemplates,
|
||
ActionURLs,
|
||
extract_mentions,
|
||
truncate_message,
|
||
get_chat_name,
|
||
)
|
||
from .handlers import get_users_with_notifications_enabled
|
||
|
||
# Импортируем handlers и signals для регистрации
|
||
from . import handlers # noqa: F401
|
||
from . import signals # noqa: F401
|
||
|
||
__all__ = [
|
||
'NotificationVerbs',
|
||
'MessageTemplates',
|
||
'ActionURLs',
|
||
'extract_mentions',
|
||
'truncate_message',
|
||
'get_chat_name',
|
||
'get_users_with_notifications_enabled',
|
||
]
|