Messaging Guide
Когда использовать
Используйте messaging, когда проекту нужен переиспользуемый Django-side messaging layer с:
- content models для редактируемого email-текста
- builders и dispatch engine
- queue/direct delivery adapters
- abstract models для recipients, threads, messages и campaigns
- audience и batching primitives для кампаний
codex_django.messaging теперь является canonical пакетом.
codex_django.notifications остается совместимым deprecated path на один minor release.
Основные точки входа
codex_django.messagingcodex_django.messaging.adapterscodex_django.messaging.mixinscodex_django.messaging.cabinetcodex_django.messaging.audiencecodex_django.messaging.campaigns
Переход с notifications
Замените:
from codex_django.notifications import BaseNotificationEngine, NotificationPayloadBuilder
на:
from codex_django.messaging import BaseMessagingEngine, MessagingPayloadBuilder
Ключевые переименования:
codex_django.notifications->codex_django.messagingBaseNotificationEngine->BaseMessagingEngineNotificationPayloadBuilder->MessagingPayloadBuilderCONVERSATIONS_RECIPIENT_MODEL->MESSAGING_RECIPIENT_MODEL
Messaging Cabinet Integration
Используйте cabinet feature-layer, когда проекту нужен staff mailbox и campaign surface без привязки библиотечного кода к concrete models проекта.
- Создайте concrete models через нужные abstract messaging models:
AbstractThread,AbstractMessage,AbstractMessageReply,AbstractCampaign,AbstractCampaignRecipient,AbstractSystemRecipient,AbstractEmailLog,AbstractEmailSettings. - Реализуйте
MessagingBridgeв проекте. Bridge читает project ORM и возвращает typed state:MailboxState,CampaignListState,RecipientListState,DeliveryLogState,MessagingSettingsState. - Держите cabinet views тонкими: прочитать query params, вызвать bridge,
пропустить state через
MessagingCabinetPresenter, выставитьrequest.cabinet_module = "messaging"и отрендерить project template. - Регистрируйте навигацию через
build_messaging_topbar()иbuild_messaging_sidebar(). Settings подключаются черезdeclare(..., settings_url="cabinet:messaging_settings"), а не как обычный sidebar item. - Переопределяйте
cabinet/messaging/...templates в проекте, когда нужен custom markup. Библиотека поставляет fallback pages и reusable components по тем же путям.
Default cabinet navigation:
- Mailbox: inbox оператора, thread detail, actions и reply composer.
- Campaigns: broadcast list и composer.
- Recipients: таблица аудитории/получателей.
- Delivery log: технический delivery audit table.
Templates намеренно не является default top-level item. Template management
должен стать sub-flow внутри Campaigns или optional module только после появления
реальной email/content template модели.
Минимальная Atlas-like регистрация:
from codex_django.cabinet import declare
from codex_django.messaging.cabinet import build_messaging_sidebar, build_messaging_topbar
from django.urls import reverse_lazy
declare(
module="messaging",
space="staff",
topbar=build_messaging_topbar(reverse_lazy("cabinet:messaging_mailbox")),
sidebar=build_messaging_sidebar(
mailbox_url=reverse_lazy("cabinet:messaging_mailbox"),
campaigns_url=reverse_lazy("cabinet:messaging_campaigns"),
recipients_url=reverse_lazy("cabinet:messaging_recipients"),
delivery_log_url=reverse_lazy("cabinet:messaging_delivery_log"),
),
settings_url="cabinet:messaging_settings",
)