-
Notifications
You must be signed in to change notification settings - Fork 1
DemoScenariesRus_GettingStarted_PrivEth
Сценарий демонстрирует распространение сделки по узлам и переключение статуса сделки.
Данный сценарий проводится в кластере Private Ethereum (PrivEth).
Используется предустановленный смарт-контракт с типом сделки FirstDeal (без карты переходов).
- На узле
PrivEth-1создается сделка с атрибутамиDocNumber, DocDate, DocSumma - На узле
PrivEth-1переключаем статус сделки вStatus1 - Убеждаемся в приходе сделки на узлы
PrivEth-1, PrivEth-2, а также в отсутствии сделки на узлеPrivEth-3 - На узле
PrivEth-2переключаем статус сделки вStatus2, добавляем атрибутPaymentDateи изменяем атрибутDocSumma - Убеждаемся в приходе изменения сделки на узлы
PrivEth-1, PrivEth-2 - На узле
PrivEth-1переключаем статус сделки вClosed - Убеждаемся в приходе изменения сделки на узлы
PrivEth-1, PrivEth-2, а также в том, что на узлеPrivEth-3сделки по-прежнему нет
ВНИМАНИЕ! В примерах вызовов подставлен идентификатор пробной сделки (UID) - Вам надо подставлять вместо него идентификатор, полученный при создании сделки на шаге 1.
ВНИМАНИЕ! В запросах в заголовке CHANNEL, AUHORIZATION необходимо использовать полученный Вами при регистрации персональный идентификатор. Это позволит не мешать одновременной работе нескольких пользователей, а также облегчит работу службы Технической поддержки при возникновении у Вас каких-либо вопросов. В примерах запросов используется персональный идентификатор Demo.
- Получение идентификатора сделки
- Проверка отсутствия сделки на других узлах (этот шаг носит чисто демонстрационный характер, дабы убедится, что сделки нигде "заранее" нет и ее репликация произойдет только после создания)
- Собственно создание сделки
Используется вызов GET-метода /api/uid. Метод возвращает GUID, который может быть однократно использован для создания сделки
| Пример вызова | Пример ответа |
|---|---|
| curl -X GET "http://democlient1.kekker.com/api/uid" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | "840a0671-4afa-4f87-9f3f-12c252bXXXXX" |
Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор сделки, например, полученный на предыдущем шаге
| Пример вызовов (отличие в URL узла) | Пример ответа |
|---|---|
| curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | { "ErrorMessage": "Deal not found" } |
| curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | |
| curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" |
Используется вызов POST-метода /api/deals/. В качестве данных запроса указывается json-спецификация сделки, в нашем случае:
{
"dealUid": "[UID]",
"kind": "FirstDeal",
"parties": [ { "key": "CLIENT1", "role": "Role1" },
{ "key": "ClIENT2", "role": "Role2" }
],
"parameters": [ { "key": "DocNumber", "value": "1" },
{ "key": "DocDate", "value": "11.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 S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" -d "{ \"dealUid\": \"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"kind\": \"FirstDeal\", \"parties\": [ { \"key\": \"CLIENT1\", \"role\": \"Role1\" } ,{ \"key\": \"CLIENT2\", \"role\": \"Role2\" } ], \"parameters\": [ { \"key\": \"DocNumber\", \"value\": \"1\" },{ \"key\": \"DocDate\", \"value\": \"11.02.2020\" },{ \"key\": \"DocSumma\", \"value\": \"10000\" } ], \"parentDealUid\": null}" | Если всё хорошо - ответ пустой. |
Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация нового состояния сделки, в нашем случае:
{
"dealUid": "[UID]",
"status": "Status1__",
"remark": "Status changed to Status1 by CLIENT1",
"parameters": []
}
| Пример вызова | Пример ответа |
|---|---|
| curl -X POST "http://democlient1.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"status\":\"Status1__\", \"remark\":\"Status changed to Status1 by CLIENT1\", \"parameters\": []}" | Если всё хорошо - ответ пустой. |
3. Убеждаемся в приходе сделки на узлы PrivEth-1, PrivEth-2, а также в отсутствии сделки на узле PrivEth-3
Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор нашей сделки
Перед выполнением запросов лучше выдержать паузу в 2-3 минуты после шага [2]
| Пример вызовов (отличие в URL узла) | Пример ответа (в данном случае нас интересуют поля "kind", "status" и коллекция "parameters") |
|---|---|
| curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | На узлах PrivEth-1, PrivEth-2 ответ:
{
"uid": "840a0671-4afa-4f87-9f3f-12c252bXXXXX",
"kind": "FirstDeal",
"status": "Status1__",
"remark": "Status changed to Status1 by CLIENT1",
"parameters": [{ "key": "DocNumber", "value": "1" },
{ "key": "DocDate", "value": "11.02.2020" },
{ "key": "DocSumma", "value": "10000" }],
"parties": [{ "key": "CLIENT1", "role": "Role1" },
{ "key": "CLIENT2", "role": "Role2" }],
"files": [],
"history": [{"status": "Status1__",
"party": { "key": "CLIENT1", "role": "Role1" },
"remark": "Status changed to Status1 by CLIENT1",
"version": 2 }],
"statusMap": []
}
|
| curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | |
| curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | На узле PrivEth-3 ответ должен быть: {"ErrorMessage":"Deal not found"} |
4. На узле PrivEth-2 переключаем статус сделки в Status2, добавляем атрибут PaymentDate и изменяем атрибут DocSumma
Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация нового состояния сделки, в нашем случае:
{
"dealUid": "[UID]",
"status": "Status2__",
"remark": "Status changed to Status2 by CLIENT2",
"parameters": [ { "key": "DocSumma", "value": "20022" },
{ "key": "PaymentDate", "value": "15.03.2020" }
],
}
| Пример вызова | Пример ответа |
|---|---|
| curl -X POST "http://democlient2.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"status\":\"Status2__\", \"remark\":\"Status changed to Status2 by CLIENT2\", \"parameters\": [{\"key\":\"DocSumma\",\"value\":"20022"}, {\"key\":\"PaymentDate\",\"value\":\"15.03.2020\"}]}" | Если всё хорошо - ответ пустой. |
Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор нашей сделки
Перед выполнением запросов лучше выдержать паузу 1-2 минуты после шага [4]
| Пример вызовов (отличие в URL узла) | Пример ответа (обращаем внимание на изменение поля "status" и коллекции "parameters" и "history"): |
|---|---|
| curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | {
"uid": "840a0671-4afa-4f87-9f3f-12c252bXXXXX",
"kind": "FirstDeal",
"status": "Status2__",
"remark": "Status changed to Status2 by CLIENT2",
"parameters": [{ "key": "DocNumber", "value": "1" },
{ "key": "DocDate", "value": "11.02.2020" },
{ "key": "DocSumma", "value": "20022" },
{ "key": "PaymentDate", "value": "15.03.2020" }],
"parties": [{ "key": "CLIENT1", "role": "Role1" },
{ "key": "CLIENT2", "role": "Role2" }],
"files": [],
"history": [{ "status": "Status1__",
"party": { "key": "CLIENT1", "role": "Role1" },
"remark": "Status changed to Status1 by CLIENT1",
"version": 2 },
{ "status": "Status2__",
"party": { "key": "CLIENT2", "role": "Role2" },
"remark": "Status changed to Status2 by CLIENT2",
"version": 3 }],
"statusMap": []
}
|
| curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" |
Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация нового состояния сделки, в нашем случае:
{
"dealUid": "[UID]",
"status": "Closed___",
"remark": "Deal closed by CLIENT1",
"parameters": []
}
| Пример вызова | Пример ответа |
|---|---|
| curl -X POST "http://democlient1.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"status\":\"Closed___\", \"remark\":\"Deal closed by CLIENT1\", \"parameters\": []}" | Если всё хорошо - ответ пустой. |
7. Убеждаемся в приходе изменения сделки на узлы PrivEth-1, PrivEth-2, а также в том, что на узле PrivEth-3 сделки по-прежнему нет
Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор нашей сделки
Перед выполнением запросов лучше выдержать паузу 1-2 минуты после шага [6]
| Пример вызовов (отличие в URL узла): | Пример ответа (обращаем внимание на изменение поля **status** и коллекцию **history**) |
|---|---|
| curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | На узлах PrivEth-1, PrivEth-2 ответ:
{
"uid": "840a0671-4afa-4f87-9f3f-12c252XXXXX",
"kind": "FirstDeal",
"status": "Closed___",
"remark": "Deal closed by CLIENT1",
"parameters": [{ "key": "DocNumber", "value": "1" },
{ "key": "DocDate", "value": "11.02.2020" },
{ "key": "DocSumma", "value": "20022" },
{ "key": "PaymentDate", "value": "15.03.2020" }],
"parties": [{ "key": "CLIENT1", "role": "Role1" },
{ "key": "CLIENT2", "role": "Role2" }],
"files": [],
"history": [{ "status": "Status1__",
"party": { "key": "CLIENT1", "role": "Role1" },
"remark": "Status changed to Status1 by CLIENT1",
"version": 2 },
{ "status": "Status2__",
"party": { "key": "CLIENT2", "role": "Role2" },
"remark": "Status changed to Status2 by CLIENT2",
"version": 3 },
{ "status": "Closed___",
"party": { "key": "CLIENT1", "role": "Role1" },
"remark": "Deal closed by CLIENT1",
"version": 4 }],
"statusMap": []
}
|
| curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | |
| curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" | На узле PrivEth-3 ответ должен быть: {"ErrorMessage":"Deal not found"} |