@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<b>В ТЗ: Функциональные изменения\n<b>-На стороне Workflow\n<b>-"Получение доступных типов корректировок"
Workflow -> WTIS: Запрашивает признак доступности корректировки для атрибутов
WTIS -> Workflow: Возвращает доступные для редактирования атрибуты
Workflow --> Gateway: Возвращает поля доступные\nдля редактирования
Gateway --> ARM: Возвращает атрибуты\nдоступные для редактирования
ARM --> USER: Дизейблит недоступные для\nредактирования элементы\n<b>В ТЗ: Функциональные изменения\n<b>"На стороне ARM"

loop Внесение корректировок пользоваелем и наполнение транзакции
USER -> ARM: Вносит корректировки
ARM -> Gateway: Использует стандартные\nendpoint заказа
Gateway -> Workflow: Передает запрос в workflow
Workflow -> Workflow: Проверяет что транзакция открыта:\n<b>В ТЗ: Проверка наличия открытой транзакции
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: <b>oms.order.sync</b>\n<b>В ТЗ: Функциональные изменения - "На стороне 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