Initial commit

This commit is contained in:
Andrey
2024-04-08 19:15:50 +03:00
commit 072ced2815
51 changed files with 2926 additions and 0 deletions

119
ordering.puml Normal file
View File

@@ -0,0 +1,119 @@
@startuml
title Проверка лимитов заказа
autonumber
actor User
participant ARM as ARM
participant Gateway as Gateway
participant Workflow as Workflow
participant Temporal as Temporal
User -> ARM: Нажатие кнопки "Оформить заказ"
ARM -> Gateway: Отправляет запрос на /orders/{orderID}/validate
Gateway -> Temporal: Отправка данных на\nоформление заказа и его проверку
Temporal --> Workflow: Получение сообщения
Workflow -> Workflow: Проверка лимитов ПВЗ и размеров товаров
Workflow -> Workflow: Завершает выполнение workflow
Workflow -> Temporal: Отдает результат проверки в Temporal.
Gateway --> Temporal: Слушает temporal и получает результат проверки
Gateway --> ARM: Ответ в виде кодов ответа с /orders/{orderID}/validate
alt Проверки пройдены
ARM -> ARM: Проверки пройдены успешно
ARM -> Gateway: Вызывает метод bf orders/{orderID}/ordering оформления заказа\nи отправляет идентификатор orderId для оформления заказа в Gateway
else Проверки не пройдены
ARM -> User: Показывает Пользователю модальное\nокно с лимитами ПВЗ и выбором\nдальнейших действий - продолжить\nоформление или отменить.
alt Отмена оформления
User -> ARM: Нажимает кнопку "Отменить оформление"
ARM -> ARM: Закрывает модальное окно и ждет следующего действия от менеджера (Конец процесса)
else Продолжение оформления
User -> ARM: Нажимает кнопку "Продолжить оформление"
ARM -> Gateway: Вызывает метод bf orders/{orderID}/ordering оформления заказа\nи отправляет идентификатор orderId для оформления заказа в Gateway
end
end
note across: Продолжение описания алгоритма начинается с Workflow оформления заказа
@enduml
@startuml
title Оформление заказа
autonumber
participant User
participant ARM
participant Gateway
participant Temporal
participant Workflow
queue Kafka
participant Wtis
participant Order
ARM -> Gateway: Вызов метода bf orders/{orderID}/ordering
ARM -> User: Блокирует заказ на изменение\nи выводит оповещения: "Оформление заказа",
Gateway -> Temporal: Отправляет данные\nна оформление заказа
Workflow --> Temporal: Получает сообщения о заказе
Workflow -> Workflow: Создает WorkflowOrdering
Workflow -> Temporal: Отправляет workflowID и runID
Temporal -> Gateway: Получает workflowID и runID
Gateway -> ARM: Отправка workflowID и runID\nв ответ на метод bf orders/{orderID}/ordering
ARM -> ARM: Сохранение workflowID и runID в куки на 5 минут
loop Раз в 5 секунд
ARM -> Gateway: Периодическая проверка состояния workflow\nзапросом на orders/{orderID}/workflow/{workflowID}
Gateway -> Temporal: Отправляет запрос на\nпроверку состояния workflow
Workflow -> Temporal: Слушает и получает запрос\nна состояние workflow
Workflow -> Temporal: Уточнение состояния workflow\n(в работе или завершен успешно\nили завершен с ошибкой)\n WorkflowOrdering
Gateway -> Temporal: Слушает и получает состояния\nworkflow
Gateway -> ARM: Получает ответ
end
alt До тех пор пока workflow не завершен
ARM -> User: ARM блокирует интерфейс пользователю
else workflow завершен успешно
ARM -> User: АРМ снимает блокировку и показывает оповещение\n"Заказ оформлен". И обновляет все данные\nсодержащие статусы, подробнее описано ниже.
else workflow завершен с ошибкой "Втис не доступен"
ARM -> User: АРМ снимает блокировку и показывает оповещение\n"Заказ не оформлен"
else workflow завершен с ошибкой "Не удалось взять в резерв товары"
ARM -> User: АРМ снимает блокировку и показывает\nоповещение "Не удалось товары взять в резерв".\nИ обновляет все данных содержащие статусы,\nподробнее описано ниже.
end
Workflow -> Order: Забирает структуру заказа
Workflow -> Workflow: Конвертирует структуру заказа\nв нужную для Wtis
Workflow -> Workflow: Создает таймер ответа\nна запрос и ждет ответ от Wtis\nTBD: Сколько таймер?
Workflow -> Kafka: Записывает данные в топик\nKafka oms.orders.sync
alt Успешный сценарий
Wtis -> Kafka: Читает данные по заказу
Wtis -> Wtis: Создает заказ или сопоставляет\nс тем что уже есть и апдейтит\nего в БД
Wtis -> Wtis: При необходимости резервирует\nтовары через "Умный резерв"
Wtis -> Temporal: Отправляет сигнал что закончил свои флоу
else WTIS не доступен
Wtis -> Kafka: Не забрал данные по заказу
Temporal -> Temporal: по таймауту понимает что\nвтис не ответил\nTBD: Где таймер?\nНа воркфлоу или на темпорал?
Workflow -> Temporal: Слушает Temporal и\nполучает информацию об ошибке
Workflow -> Order: Ничего не обновляет в БД Order
else WTIS частично взял товары в резерв
Wtis -> Kafka: Читает данные по заказу
Wtis -> Wtis: Создает заказ или сопоставляет\nс тем что уже есть и апдейтит\nего в БД
Wtis -> Wtis: При необходимости резервирует\nтовары через "Умный резерв"\n(частичный резерв)
Wtis -> Temporal: Отправляет сигнал что закончил\nсвои флоу частично
Workflow -> Temporal: Слушает Temporal и получает\nинформацию о проведенном резерв
Workflow -> Order: Обновляет ту часть товаров что была зарезервирована
Workflow -> Workflow: Меняет мастер систему\nв заказе на WTIS
Workflow -> Gateway: Возвращает ответ
Gateway -> ARM: Возвращает ответ
ARM -> User: Пишет сообщение пользователю:\n"Заказ не оформлен товары не зарезервировались"
end
Wtis -> Kafka: Записывает обновленные\nданные заказа
Temporal -> Kafka: Слушает топик wtis.orders.sync и получает структуру даных
Workflow -> Order: Маппит структуру и сохранет ее в Order, обновляя статусы заказов и товаров
Workflow -> Workflow: Запускает дочерний\nworkflow SendSMSMessage
Workflow -> Workflow: Завершает wf WorkflowOrdering
Workflow -> Temporal: Сообщает о завершении workflow
Gateway -> Temporal: Слушает Temporal и\nполучает сигнал что wf завершен
Gateway --> ARM: Возвращает ответ на bf orders/{orderID}/ordering
ARM -> User: Разблокирует интерфейс, меняет управляющие кнопки заказа
ARM -> Gateway: Вызывает метод bf /orders/{orderID}/products\nтоварного блока обновляет статусы товаров.
Gateway -> ARM: answer
ARM -> Gateway: Вызывает метод bf /orders/{orderID}\nзаказа обновляет статус заказа.
Gateway -> ARM: answer
ARM -> Gateway: Вызывает метод bf /orders/{orderID}/deliveries\nобновляет статус доставки.
Gateway -> ARM: answer
@enduml