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

user -> BackendSite: Вводит запрос в поисковую строку
BackendSite -> BackendSite: Обработка запроса на бэкенде\n сайта и формирование запроса\nдля Sherlock
BackendSite -> Sherlock: REST POST api/v1/products
Sherlock -> Sherlock: Перевод запроса\nна второй язык
Sherlock -> Sherlock: Преобразование запроса\n в структуру и формирование\nзапроса для ElasticSearch

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

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

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

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

else Найдены товары

alt Есть товары спектр
Sherlock -> ElasticSearch: REST GET products/_search RU
Sherlock -> ElasticSearch: REST GET products/_search EN
    note over ElasticSearch
    Категории спектр поднимаются
    наверх И товары внутри них
    сортируются по скорингу
    endnote

else Товаров спектр не найдено

Sherlock -> ElasticSearch: REST GET products/_search RU
Sherlock -> ElasticSearch: REST GET products/_search EN
    note over ElasticSearch
    Товары сортируются
    по скорингу
    endnote
end

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

end
@enduml