@startuml
mainframe api/v1/filters Общая схема
Actor user
participant BackendSite
participant Sherlock
Database ElasticSearch

user -> BackendSite: Вводит запрос в поисковую строку
BackendSite -> BackendSite: Обработка запроса на бэкенде\n сайта и формирование запроса\nдля Sherlock

BackendSite -> Sherlock: REST POST api/v1/filters
Sherlock -> Sherlock: Преобразование запроса\nв структуру и формирование\nзапроса для ElasticSearch

    note over Sherlock
    Отправка запроса в
    ElasticSearch с доп
    сортировкой по категориям
    из Спектра
    endnote


alt ElasticSearch ничего не вернул
Sherlock -> ElasticSearch: REST GET products/_search
ElasticSearch --> Sherlock: Получен пустой ответ

    note over Sherlock
    Отправляется доп.запрос
    в ElasticSearch с меньшим
    процентом вхождения
    endnote

Sherlock -> ElasticSearch: REST GET products/_search
ElasticSearch --> Sherlock: Получен пустой ответ
Sherlock --> BackendSite: Получен пустой ответ
Sherlock --> user: Пользователь получает страницу:\nРезультаты не найдены

else Найдены товары
alt Есть товары спектр
Sherlock -> ElasticSearch: REST GET products/_search
    note over ElasticSearch
    Категории спектр
    поднимаются наверх
    endnote
else Товаров спектр не найдено
Sherlock -> ElasticSearch: REST GET products/_search
end

ElasticSearch --> Sherlock: Передает список\nкатегорий и фильтров

Sherlock --> BackendSite: Список категорий и фильтров

BackendSite --> user: Пользователь получает фильтры\nна странице: Результаты поиска

end
@enduml