@startuml title Flow: Получение и обработка заказов с маркетплейса actor "Покупатель" as Customer participant "T-Shop\n(Маркетплейс)" as TShop participant "T-Shop-ADP\n(Адаптер)" as Adapter database "T-Shop-ADP-DB\n(sync_state, orders)" as DB participant "Superset" as Superset actor "Менеджер ВИ" as Admin == Покупатель оформляет заказ == Customer -> TShop: Оформление заказа note right of TShop: Статус заказа:\nstatus = "PROCESSING"\nsubstatus = "STARTED" TShop --> Customer: == Периодическая синхронизация заказов (Дельта по updatedAt) == loop Каждые 15 минут Adapter -> DB: Чтение состояния синхронизации\n(sync_log.last_synced_updated_at) DB --> Adapter: last_synced_updated_at Adapter -> TShop: **GET /orders?updatedAtFrom=last_synced_updated_at-5min&updatedAtTo=now()-2min&limit=50** TShop --> Adapter: Ответ с пагинацией\norders[...], nextPageToken="abc123" loop Пока есть nextPageToken Adapter -> DB: **UPSERT заказов в БД** note right of Adapter: Insert новых\nUpdate существующих (по updatedAt) DB --> Adapter: Adapter -> TShop: Следующий запрос с pageToken TShop --> Adapter: Следующая порция заказов end Adapter -> DB: Обновить sync_log\nlast_synced_updated_at = updatedAtTo DB --> Adapter: end == Обновление Superset == Superset -> DB: Автообновление дашборда\n(через прямое подключение) DB --> Superset: Актуальные данные == Работа менеджера (Оформление заказов) == Admin -> Superset: Открытие дашборда Superset -> DB: Запрос данных DB --> Superset: Superset --> Admin: Отображение заказов Admin -> Admin: Ручное оформление заказа\nв АРМ системе == Работа менеджера (Обновление статуса заказа) == Admin -> Adapter: Обновление статуса заказа в T-Shop через Postman Adapter -> Adapter: Подстановка кредов + обработка параметров входящих Adapter --> TShop: Отправка запроса == Работа менеджера (Отправка кода получения заказа) == Admin -> Adapter: Отправка кода получения в T-Shop через Postman Adapter -> Adapter: Подстановка кредов + обработка параметров входящих Adapter --> TShop: Отправка запроса @enduml