@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 --> Gateway: Возвращает поля доступные\nдля редактирования Gateway --> ARM: Возвращает ответ что транзакция открыта ARM --> USER: Разблокирует все элементы в\nинтерфейсе для редактирования 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:\nВ ТЗ: Функциональные изменения - "На стороне Gateway" - п.2 WTIS -> WTIS: Обновляет сущность заказа autonumber 22.1.1 alt Изменения успешно проведены WTIS --> Workflow: Возвращает ответ 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: Возвращает ответ failed Workflow -> History: Отправляет GRPC сигнал\nоб удалении транзакции History --> Workflow: Отправляет GRPC сигнал\nчто транзакция удалена Workflow -> Workflow: Откатывает изменения,\nудаляет корректировки Workflow --> Gateway: answer Gateway --> ARM: answer ARM --> USER: Отображает модальное\nокно "Не удалось\nприменить изменения" end @enduml