Skip to content

Подсистема присвоения цветовых индикаторов заказам в интернет-магазине

Notifications You must be signed in to change notification settings

ashandi/orders-color-setter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

orders-color-setter

Подсистема присвоения цветовых индикаторов заказам в интернет-магазине

Задача

Присваивать заказам при создании цветовые индикаторы по следующей схеме:

  • тестовые заказы помечать серым цветом;
  • заказы, в истории покупателя которых последний заказ находится в статусе "Возврат" - желтым цветом;
  • заказы, в истории покупателя которых последние два и более заказа находятся в статусе "Возврат" - оранжевым цветом;
  • заказы, в истории покупателя которых есть заказы в статусе "Украден" - красным цветом. Цветовая индикация не касается заказов, оформленных по предоплате.

Дополнительная сложность заключается в том, что заказы могут оформляться без регистрации пользователей в системе, следовательно, искать заказы от одного и того же покупателя необходимо не по полю user_id.

Решение

В папке app/Jobs находится класс SetOrderColor. Этот job запускается при срабатывании события OrderWasCreated.

Он обращается к OrderRepository, который с помощью поискового движка Elasticsearch ищет предыдущие заказы покупателя на основе совпадения по ФИО, email, телефону или адресу. Чтобы заказ попался в эту выборку, необходимо совпадение минимум по двум критериям из этих четырех. Проверка по адресу заключает в себя ряд проверок на точное совпадение почтового индекса и id региона и неточное совпадение названия населенного пункта, улицы, дома и квартиры.

OrderRepository - интерфейс, реализует который класс ESOrderRepository (Инверсия зависимостей).

Окрашиванием заказа занимается класс OrderColormanager из папки App\Services. Здесь применен паттерн Chain of Responsibility. Есть несколько хандлеров, через которые по цепочке проходит заказ. Каждый хандлер может окрасить заказ и прервать работу цепи, либо передать заказ следующему хандлеру в цепи. Если заказ прошел все хандлеры и не окрасился, он остается бесцветным. Хандлеры в цепи расположены по приоритету.

About

Подсистема присвоения цветовых индикаторов заказам в интернет-магазине

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages