@startuml scale 2000x2000 mainframe Внесение изменения в заказ в статусе "В работе" Actor USER participant ARM participant Gateway participant Workflow participant History participant WTIS '-------------------------------------------action------------------- autonumber USER -> ARM: Открывает заказ USER -> ARM: Нажимает кнопку\n"Редактировать заказ" ARM -> Gateway: Запрос с номером заказа Gateway -> Workflow: Инициирует запуск workflow Workflow -> History: Открывает транзакцию\nrpc StartTransaction(StartTransactionRequest) History --> Workflow: Подтверждает открытие транзакции\nreturn StartTransactionResponse Workflow -> Workflow: Запускает workflow с бизнес-логикой:\nВ ТЗ: Функциональные изменения\n-На стороне Workflow\n-"Получение доступных типов корректировок" Workflow -> WTIS: Запрашивает признак доступности корректировки для атрибутов WTIS -> Workflow: Возвращает доступные для редактирования атрибуты Workflow --> Gateway: Возвращает поля доступные\nдля редактирования Gateway --> ARM: Возвращает атрибуты\nдоступные для редактирования ARM --> USER: Дизейблит недоступные для\nредактирования элементы\nВ ТЗ: Функциональные изменения\n"На стороне ARM" loop Внесение корректировок пользоваелем и наполнение транзакции USER -> ARM: Вносит корректировки ARM -> Gateway: Использует стандартные\nendpoint заказа Gateway -> Workflow: Передает запрос в workflow Workflow -> Workflow: Проверяет что транзакция открыта:\nВ ТЗ: Проверка наличия открытой транзакции autonumber 14.1.1 alt Транзакция закрыта Workflow -> Gateway: Возвращает ошибку Gateway -> ARM: answer ARM -> USER: Выводит сообщение:\n"Транзакция была закрыта,\nнеобходимо заново открыть\nзаказ на корректировку" autonumber 14.2.1 else Транзакция открыта Workflow -> History: Отправляет GRPC сигнал\nс корректировками в History\nrpc CreateEvent(CreateEventRequest) History -> History: Сохраняет\nкорректировки History --> Workflow: return CreateEventResponse Workflow --> Gateway: answer Gateway --> ARM: answer end 'Это end alt autonumber 15 end 'Это end loop USER -> ARM: Нажимает кнопку\n"Сохранить изменения"\nИЛИ "Отменить изменения" ARM -> Gateway: Отправляет запрос на\n/orders/end-correction/orderID={orderGUID} Gateway -> Workflow: Вызывает wf Workflow -> History: Запрашивает актуальное\nсостояние заказа\nrpc GetLastState(GetLastStateRequest) History --> Workflow: Возвращает Модель заказа\nс примененнеными корректировками\nreturn GetLastStateResponse Workflow -> Workflow: Закрывает транзакцию,\nсохраняет актуальный\nзаказ в Order/shipment Workflow -> WTIS: Отправляет модель заказа через топик kafka: oms.order.sync\nВ ТЗ: Функциональные изменения - "На стороне Gateway" - п.2 WTIS -> WTIS: Пытается применить\nвсе изменения в заказе autonumber 22.1.1 alt Изменения успешно проведены WTIS --> Workflow: Возвращает сигнал в temporal success Workflow -> History: Отправляет GRPC сигнал о закрытии\nтранзакции\nrpc EndTransaction(EndTransactionRequest) History --> Workflow: Подтверждает закрытие\nтранзакции\nreturn EndTransactionResponse Workflow --> Gateway: answer Gateway --> ARM: answer ARM --> USER: Отображает модальное\nокно "Изменения\nуспешно сохранены" autonumber 22.2.1 else Изменения не проведены WTIS --> Workflow: Возвращает сигнал в temporal failed Workflow -> History: Отправляет GRPC сигнал\nоб удалении транзакции History --> Workflow: Отправляет GRPC сигнал\nчто транзакция удалена Workflow -> Workflow: Откатывает изменения,\nудаляет корректировки Workflow --> Gateway: answer Gateway --> ARM: answer ARM --> USER: Отображает модальное\nокно "Не удалось\nприменить изменения" end @enduml