File tree Expand file tree Collapse file tree 3 files changed +50
-0
lines changed
Expand file tree Collapse file tree 3 files changed +50
-0
lines changed Original file line number Diff line number Diff line change 1010from db .connection import database_connection_scope
1111from logging_config .logger import configure_logging
1212from brevo .api_client import BrevoApiClient
13+ from brevo .sync_worker import BrevoSyncWorker
1314from funnels .sync_service import FunnelSyncService
1415from funnels .purchase_sync_service import PurchaseSyncService
1516
@@ -103,6 +104,15 @@ def main() -> None:
103104
104105 purchase_sync_service .sync (max_rows = 100 )
105106
107+ if not settings .application .dry_run :
108+ brevo_sync_worker = BrevoSyncWorker (
109+ connection = connection ,
110+ brevo_client = brevo_client ,
111+ )
112+ brevo_sync_worker .run_once (limit = 100 )
113+ else :
114+ logger .info ("Dry run mode: BrevoSyncWorker is not executed." )
115+
106116 logger .info ("Job finished" )
107117
108118 except KeyboardInterrupt :
Original file line number Diff line number Diff line change @@ -82,6 +82,26 @@ This will:
8282* record funnel entry in the ` funnel_entries ` table (or log dry-run message, depending on ` APP_DRY_RUN ` );
8383* sync certificate purchases with MODX tables and update ` funnel_entries ` (or log dry-run message, depending on ` APP_DRY_RUN ` ).
8484
85+ ### 2.2.1. End-to-End Flow
86+
87+ The main task follows an outbox pattern for reliable Brevo synchronization:
88+
89+ 1 . ** Funnel Sync and Purchase Sync** write state into:
90+ * ` funnel_entries ` (main analytics table)
91+ * ` brevo_sync_outbox ` (outbox table for Brevo operations)
92+
93+ 2 . ** BrevoSyncWorker** reads pending jobs from ` brevo_sync_outbox ` and applies them to Brevo by calling the Brevo API.
94+
95+ This decouples database writes from external API calls, ensuring that:
96+ * Database operations and outbox job creation happen atomically within transactions
97+ * Brevo API calls can be retried independently if they fail
98+ * The system can recover from temporary Brevo API outages without losing work
99+
100+ ** In dry-run mode:**
101+ * Only read queries are executed
102+ * ` funnel_entries ` and ` brevo_sync_outbox ` are not modified
103+ * The worker is not executed
104+
85105### 2.3. Running Conversion Report
86106
87107``` powershell
Original file line number Diff line number Diff line change @@ -87,6 +87,26 @@ python -m app.main
8787* записывает вход в воронку в таблицу ` funnel_entries ` (или логирует сообщение dry run, в зависимости от ` APP_DRY_RUN ` );
8888* синхронизирует покупки сертификатов с таблицами MODX и обновляет ` funnel_entries ` (или логирует сообщение dry run, в зависимости от ` APP_DRY_RUN ` ).
8989
90+ ### 2.2.1. Сквозной поток выполнения
91+
92+ Основная задача использует паттерн outbox для надежной синхронизации с Brevo:
93+
94+ 1 . ** Модуль синхронизации воронок и покупок** записывает состояние в:
95+ * ` funnel_entries ` (основная аналитическая таблица)
96+ * ` brevo_sync_outbox ` (таблица outbox для операций Brevo)
97+
98+ 2 . ** BrevoSyncWorker** забирает задания из ` brevo_sync_outbox ` и применяет их к Brevo, вызывая API Brevo.
99+
100+ Это разделяет запись в базу данных и внешние вызовы API, обеспечивая:
101+ * Атомарность операций с базой данных и создания заданий в outbox в рамках транзакций
102+ * Возможность повторных попыток вызовов API Brevo при сбоях
103+ * Восстановление системы после временных сбоев API Brevo без потери работы
104+
105+ ** В режиме dry-run:**
106+ * Выполняются только запросы на чтение
107+ * Таблицы ` funnel_entries ` и ` brevo_sync_outbox ` не изменяются
108+ * Воркер не запускается
109+
90110### 2.3. Запуск отчета по конверсии
91111
92112``` powershell
You can’t perform that action at this time.
0 commit comments