@startuml
participant Агент as agent
participant "MQTT Broker (raw\ntopic)" as mqtt1
participant "Edge Service" as edge
participant "MQTT\nBroker (processed\ntopic)" as mqtt2
participant "Hub Service" as hub
participant "Redis" as redis
participant "Store API" as store
participant "PostgreSQL" as db
participant "MapView Client" as mapview

agent -> mqtt1 : Надіслати\nсиру\nтелеметрію
mqtt1 -> edge : Передати\nсире\nповідомлення
edge -> edge : Перевірити\nAgentData
edge -> edge : Обробити\nтелеметрію
edge -> mqtt2 : Надіслати\nоброблені дані
mqtt2 -> hub : Передати\nоброблене\nповідомлення
hub -> hub : Перевірити\nProcessedAgentData
hub -> redis : LPUSH у буфер
hub -> redis : LPOP елемента\nbatch
redis -> hub : Повернути\nелемент
hub -> store : POST batch
store -> db : Додати записи
db --> store : Повернути\nстворені записи
store -> mapview : Надіслати через WebSocket
mapview -> mapview : Сортувати за\ntimestamp
mapview -> mapview : Оновити маркер\nтранспорту
mapview -> mapview : Додати маркер\npothole/bump
store --> hub : Успішна відповідь
@enduml
