Skip to content

DemoScenariesRus_AdvancedLevel_PrivEth

Paul edited this page Feb 16, 2020 · 6 revisions

Сценарий Advanced Level

Дополнительно к функционалу сценария Getting Started данный сценарий демонстрирует:

  • передачу файлов
  • контроль изменения статуса сделки в соответствии с картой статусов
  • мониторинг изменения состояния сделок

Данный сценарий проводится в кластере Private Ethereum (PrivEth).

Участники сделки:

  • Client1 (роль Role1) - узел PrivEth-1
  • Client2 (роль Role2) - узел PrivEth-2
  • Client3 (роль Role3) - узел PrivEth-3

Перед исполнением сценария рекомендуется создать на локальном компьютере тестовые файлы Status-1-1.dat, Status-2-1.dat, Status-2-2.dat, Status-3-1.dat. Хотя технические ограничения на размер файлов отсутствуют, для ускорения прохождения демо-сценария рекомендуется использовать файлы размером до 100 Kb.

Используется предустановленный смарт-контракт с типом сделки AdvancedDeal, со следующей картой переходов:

  • New -> Status-1 -> Role1
  • Status-1 -> Status-2 -> Role2
  • Status-2 -> Status-3 -> Role3
  • Status-3 -> Closed -> Role1,Role3

Сценарий заключается в последовательном исполнении следующих шагов:

  1. Client1 создает сделку с атрибутами DocNumber, DocDate, DocSumma
  2. Client1 переключает статус сделки в Status-1 с приложением файла Status-1-1.dat
  3. Убеждаемся в приходе изменения сделки и файлов на узлы Client1, Client2, Client3
  4. Client2 переключает статус сделки в Status-2 с приложением файла Status-2-1.dat и Status-2-2.dat
  5. Убеждаемся в приходе изменения сделки и файлов на узлы Client1, Client2, Client3
  6. Client2 пытается переключить статус сделки в Status-4 (статус, несуществующий в карте сделки) с приложением файла Status-3-1.dat
  7. Убеждаемся в отсутствии изменений в сделке на узлах Client1, Client2, Client3
  8. Client2 пытается переключить статус сделки в Status-3 (несоответствие ролевой модели карты сделки) с приложением файла Status-3-1.dat
  9. Убеждаемся в отсутствии изменений в сделке на узлах Client1, Client2, Client3
  10. Client3 переключает статус сделки в Status-3
  11. Убеждаемся в приходе изменения сделки на узлы Client1, Client, Client3
  12. Client1 или Client3 переключает статус сделки в Closed
  13. Убеждаемся в приходе изменения сделки на узлы Client1, Client2, Client3

ВНИМАНИЕ! В запросах в заголовке CHANNEL необходимо использовать полученный Вами при регистрации персональный идентификатор. Это позволит не мешать одновременной работе нескольких пользователей, а также облегчит работу службы Технической поддержки при возникновении у Вас каких-либо вопросов. В примерах запросов используется персональный идентификатор Demo.

1. Client1 создает сделку с атрибутами DocNumber, DocDate, DocSumma

Создание сделки состоит из следующих шагов:

  • Получение идентификатора сделки
  • Собственно создание сделки

Получение идентификатора сделки

Используется вызов GET-метода /api/uid. Метод возвращает GUID, который может быть однократно использован для создания сделки

Пример вызова:

curl -X GET "http://democlient1.kekker.com/api/uid" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа:

"963f75e3-43b9-4aa6-a6cf-7c1d59b600da"

Создание сделки

Используется вызов POST-метода /api/deals/. В качестве данных запроса указывается json-спецификация сделки, в нашем случае: { "dealUid": "[UID]", "kind": "AdvancedDeal", "parties": [ { "key": "CLIENT1", "role": "Role1" }, { "key": "ClIENT2", "role": "Role2" }, { "key": "ClIENT3", "role": "Role3" } ], "parameters": [ { "key": "DocNumber", "value": "Advanced-1" }, { "key": "DocDate", "value": "15.02.2020" }, { "key": "DocSumma", "value": "10000" } ], "parentDealUid": null }

Пример вызова:

curl -X POST "http://democlient1.kekker.com/api/deals" -H "accept: text/plain" -H "Content-Type: application/json-patch+json" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo" -d "{ \"dealUid\": \"963f75e3-43b9-4aa6-a6cf-7c1d59b600da\", \"kind\": \"AdvancedDeal\", \"parties\": [ { \"key\": \"CLIENT1\", \"role\": \"Role1\" }, { \"key\": \"CLIENT2\", \"role\": \"Role2\" }, { \"key\": \"CLIENT3\", \"role\": \"Role3\" } ], \"parameters\": [ { \"key\": \"DocNumber\", \"value\": \"Advanced-1\" }, { \"key\": \"DocDate\", \"value\": \"15.02.2020\" },{ \"key\": \"DocSumma\", \"value\": \"10000\" } ], \"parentDealUid\": null}"

Если всё хорошо - ответ пустой.

2. Client1 переключает статус сделки в Status-1 с приложением файла Status-1-1.dat

Изменение состояния сделки в общем случае состоит из следующих шагов:

  • Загрузка файлов, прикрепляемых к новому статусу сделки
  • Собственно изменение состояния сделки

Загрузка файлов, прикрепляемых к сделке

Используется вызов POST-метода /api/deals/files. В качестве полей в запросе передаются следующие данные:

  • DealUid= [UID]
  • FileKind = Status-1-1
  • FormFile = @<путь к файлу>;type=text/plain

Пример вызова: curl -X POST "http://democlient1.kekker.com/api/deals/files" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo" -H "Content-Type: multipart/form-data" -F "DealUid=963f75e3-43b9-4aa6-a6cf-7c1d59b600da" -F "FileKind=Status-1-1" -F "formFile=@C:/Kekker/Status-1-1.dat;type=text/plain"

Если всё хорошо - ответ пустой.

Собственно изменение состояния сделки

Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация нового состояния сделки, в нашем случае: { "dealUid": "[UID]", "status": "Status-1_", "remark": "Status changed to Status-1 by CLIENT1", "parameters": [] }

Пример вызова:

curl -X POST "http://democlient1.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"963f75e3-43b9-4aa6-a6cf-7c1d59b600da\", \"status\":\"Status-1_\", \"remark\":\"Status changed to Status-1 by CLIENT1\", \"parameters\": []}"

Если всё хорошо - ответ пустой.

3. Убеждаемся в приходе изменения сделки и файлов на узлы Client1, Client2, Client3

Получение информации по измененным сделкам в общем случае состоит из следующих шагов:

  • Мониторинг событий по сделкам
  • Выгрузка файлов, связанных со сделкой

Мониторинг событий по сделкам

Используется вызов GET-метода /api/events/new. У запроса может задан набор фильтров, в нашем случае: take=10, eventTypes=StatusChanged (события изменения сделок по 10 штук)

Пример вызова:

curl -X GET "http://democlient2.kekker.com/api/events/new?take=10&eventTypes=StatusChanged" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа:

Выгрузка файлов, связанных со сделкой

4. Client2 переключает статус сделки в Status-2 с приложением файла Status-2-1.dat и Status-2-2.dat

5. Убеждаемся в приходе изменения сделки и файлов на узлы Client1, Client2, Client3

6. Client2 пытается переключить статус сделки в Status-4 (статус, несуществующий в карте сделки) с приложением файла Status-3-1.dat

7. Убеждаемся в отсутствии изменений в сделке на узлах Client1, Client2, Client3

8. Client2 пытается переключить статус сделки в Status-3 (несоответствие ролевой модели карты сделки) с приложением файла Status-3-1.dat

9. Убеждаемся в отсутствии изменений в сделке на узлах Client1, Client2, Client3

10. Client3 переключает статус сделки в Status-3

11. Убеждаемся в приходе изменения сделки на узлы Client1, Client, Client3

12. Client1 или Client3 переключает статус сделки в Closed

13. Убеждаемся в приходе изменения сделки на узлы Client1, Client2, Client3

Clone this wiki locally