@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