Проблема: - Монолитный notification_signals.py (~520 строк) смешивал разные concerns - Сложная логика с множественными сигналами и обработчиками в одном файле - Логирование и бизнес-логика переплетены с signal receivers Решение: Разделен на модульную структуру documents/notifications/: - config.py - NotificationVerbs, MessageTemplates, ActionURLs, get_uploader_name(), get_bulk_threshold() - handlers.py - notify_all_employees(), notify_specific_users(), notify_department_employees(), notify_all_acknowledged(), notify_document_comment(), notify_comment_reply() - signals.py - Django signal receivers (@receiver) для Document, DocumentAcknowledgement, DocumentComment - __init__.py - публичный API модуля Изменения: - Создан: documents/notifications/ модуль с 4 файлами - Переименован: notification_signals.py → notification_signals.py.old - Изменен: apps.py - обновлен импорт на documents.notifications Логика уведомлений: 1. Новый документ → все сотрудники/отделы/конкретные получатели 2. Все ознакомились → уведомление загрузившему 3. Комментарий → автор документа 4. Ответ на комментарий → автор родительского комментария Преимущества: - ✅ Единообразие с requests_app, procurement, feed, communications - ✅ Четкое разделение ответственности (SRP) - ✅ Централизованное логирование с контекстом - ✅ Поддержка bulk режима для массовых рассылок - ✅ Легче тестировать компоненты - ✅ Публичный API для переиспользования Верификация: - python manage.py check - успешно
36 lines
1018 B
Python
36 lines
1018 B
Python
"""
|
||
Модуль уведомлений для Documents приложения.
|
||
|
||
Публичный API:
|
||
- NotificationVerbs - константы глаголов уведомлений
|
||
- MessageTemplates - шаблоны сообщений
|
||
- ActionURLs - генераторы URL-адресов
|
||
- notify_document_ready - функция для ручного уведомления о документе
|
||
|
||
Использование:
|
||
from documents.notifications import notify_document_ready
|
||
|
||
# В коде:
|
||
notify_document_ready(document, user)
|
||
"""
|
||
|
||
from .config import (
|
||
NotificationVerbs,
|
||
MessageTemplates,
|
||
ActionURLs,
|
||
get_uploader_name,
|
||
)
|
||
from .handlers import notify_document_ready
|
||
|
||
# Импортируем handlers и signals для регистрации
|
||
from . import handlers # noqa: F401
|
||
from . import signals # noqa: F401
|
||
|
||
__all__ = [
|
||
'NotificationVerbs',
|
||
'MessageTemplates',
|
||
'ActionURLs',
|
||
'notify_document_ready',
|
||
'get_uploader_name',
|
||
]
|