Пример запроса на вывод USDT
GraphQL:
```graphql
query findManyAssetPaymentMethod($asset: String, $userId: String, $type: TransferType!) {
data: findManyAssetPaymentMethod(asset: $asset, userId: $userId, type: $type) {
...Select
}
} fragment Select on AssetPaymentMethod {
code
icon
name
description
processor
transferType
asset
Asset {
code
type
}
fields {
name
description
label
position
type
validators
isRequired
}
messages {
type
header
description
}
Product {
minAmount
maxAmount
feeFixed
feeRate
}
}
```
Variables:
```json
{
"asset": "USDT",
"type": "Withdraw",
"userId": "93adcb31-a266-4c6e-98e8-5fc574cd230d"
}
```
Response:
```json
{
"data": {
"data": [
{
"code": "TEST",
"icon": "https://raw.githubusercontent.com/user-dob/docker-microservices/master/wallet.svg",
"name": "Test",
"description": "",
"processor": "test",
"transferType": "Withdraw",
"asset": "USDT",
"Asset": {
"code": "USDT",
"type": "Crypto"
},
"fields": [],
"messages": [],
"Product": {
"minAmount": null,
"maxAmount": null,
"feeFixed": "0.0",
"feeRate": "0.0"
}
},
{
"code": "TRX",
"icon": "https://raw.githubusercontent.com/user-dob/docker-microservices/master/wallet.svg",
"name": "На кошелек TRC20",
"description": "",
"processor": "crypto-proxy",
"transferType": "Withdraw",
"asset": "USDT",
"Asset": {
"code": "USDT",
"type": "Crypto"
},
"fields": [
{
"name": "address",
"description": "Адрес",
"label": "Адрес",
"position": 0,
"type": "string",
"validators": [
{
"type": "crypto-address",
"message": "Адрес не действителен",
"blockchain": "TRX"
}
],
"isRequired": true
}
],
"messages": [],
"Product": {
"minAmount": null,
"maxAmount": null,
"feeFixed": "0.0",
"feeRate": "0.0"
}
},
{
"code": "KUNA-PRO",
"icon": "https://raw.githubusercontent.com/user-dob/docker-microservices/master/wallet.svg",
"name": "Трансфер",
"description": "",
"processor": "kuna-pro",
"transferType": "Withdraw",
"asset": "USDT",
"Asset": {
"code": "USDT",
"type": "Crypto"
},
"fields": [
{
"name": "to",
"description": "Kuna Id получателя",
"label": "Получатель",
"position": 0,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^kunaid-.{3,10}$",
"message": "Неверно введен kunaid"
}
],
"isRequired": true
},
{
"name": "comment",
"description": "Публичный комментарий",
"label": "Комментарий",
"position": 1,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^.{1,160}$",
"message": "Максимальная длинна 160 символов"
}
],
"isRequired": null
}
],
"messages": [],
"Product": {
"minAmount": null,
"maxAmount": null,
"feeFixed": null,
"feeRate": null
}
},
{
"code": "MIXO",
"icon": "https://raw.githubusercontent.com/user-dob/docker-microservices/master/wallet.svg",
"name": "Трансфер MIXO",
"description": "",
"processor": "mixo",
"transferType": "Withdraw",
"asset": "USDT",
"Asset": {
"code": "USDT",
"type": "Crypto"
},
"fields": [
{
"name": "to",
"description": "Номер телефона получателя",
"label": "Получатель",
"position": 0,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^\\+\\d{10,15}$",
"message": "Неверно введен номер телефона"
}
],
"isRequired": true
},
{
"name": "comment",
"description": "Публичный комментарий",
"label": "Комментарий",
"position": 1,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^.{1,160}$",
"message": "Неверно введен номер телефона"
}
],
"isRequired": null
}
],
"messages": [],
"Product": {
"minAmount": null,
"maxAmount": null,
"feeFixed": null,
"feeRate": null
}
},
{
"code": "ETH",
"icon": "https://raw.githubusercontent.com/user-dob/docker-microservices/master/wallet.svg",
"name": "На кошелек ERC20",
"description": "",
"processor": "crypto-proxy",
"transferType": "Withdraw",
"asset": "USDT",
"Asset": {
"code": "USDT",
"type": "Crypto"
},
"fields": [
{
"name": "address",
"description": "Адрес",
"label": "Адрес",
"position": 0,
"type": "string",
"validators": [
{
"type": "crypto-address",
"message": "Адрес не действителен",
"blockchain": "ETH"
}
],
"isRequired": true
}
],
"messages": [],
"Product": {
"minAmount": null,
"maxAmount": null,
"feeFixed": "0.0",
"feeRate": "0.0"
}
},
{
"code": "KUNA_CODE",
"icon": "https://github.com/user-dob/docker-microservices/blob/master/kuna-code.png?raw=true",
"name": "Kuna Code",
"description": "",
"processor": "code",
"transferType": "Withdraw",
"asset": "USDT",
"Asset": {
"code": "USDT",
"type": "Crypto"
},
"fields": [
{
"name": "recipientId",
"description": "Kuna Id получателя",
"label": "Получатель",
"position": 0,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^kunaid-.{3,10}$",
"message": ""
}
],
"isRequired": null
},
{
"name": "nonRefundableBefore",
"description": "Доверительный период",
"label": "Доверительный период",
"position": 1,
"type": "date",
"validators": [
{
"type": "regex",
"regex": "^.*$",
"message": ""
}
],
"isRequired": null
},
{
"name": "comment",
"description": "Публичный комментарий",
"label": "Комментарий",
"position": 2,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^.{1,160}$",
"message": ""
}
],
"isRequired": null
},
{
"name": "privateComment",
"description": "Приватный комментарий",
"label": "Приватный комментарий",
"position": 3,
"type": "string",
"validators": [
{
"type": "regex",
"regex": "^.{1,160}$",
"message": ""
}
],
"isRequired": null
},
{
"name": "code",
"description": "Kuna Code",
"label": "Kuna Code",
"position": 4,
"type": "string",
"validators": [],
"isRequired": null
}
],
"messages": [],
"Product": {
"minAmount": null,
"maxAmount": null,
"feeFixed": "0.0",
"feeRate": "0.0"
}
}
]
}
}
```
Вы получаете множество методов в результате. Вам нужны не все.
Как мы с вами утвердили, в корне обьекта появится новое поле flowType с возможными значениями (сейчас его еще нет):
INTERNAL
INTERNAL_INVITE
EXTERNAL_CRYPTO
EXTERNAL_CRYPTO_MEMO
EXTERNAL_FIAT
Пока нет поля flowType, вы делаете такой маппинг, где ключ - будущее поле flowType, а обьект - поля по которым вы ищете нужный payment method.
```json
{
"INTERNAL": {
"processor" "mixo"
},
"INTERNAL_INVITE": {
"processor" "mixo"
},
"EXTERNAL_CRYPTO": {
"processor" "crypto-proxy"
},
"EXTERNAL_CRYPTO_MEMO": {
"processor" "crypto-proxy"
},
"EXTERNAL_FIAT": {
"processor" "corefy"
}
}
```
В INTERNAL методе вы можете игнорировать field comment, и не показывать его юзеру, так как это поле опционально.
Методы EXTERNAL_CRYPTO_MEMO и EXTERNAL_CRYPTO вы пока маппите только по полю "processor": "crypto-proxy", так что вы не будете знать есть ли там мемо пока не переберёте "fields" и не найдете там поле "memo".
Помню, мы с Владом договаривались про новое поле внутри каждого филда, которое отражает его тип ("memo", "address", "card_number"), сейчас этого нет, завязывайтесь на поле "name".
--
То есть после маппинга вы вытащите такие методы:
INTERNAL: вытаскиваете метод с процессором mixo. Он сейчас 1, и работает только с номером телефона, без куна-ид.
INTERNAL_INVITE: вытаскивайте тот же самый метод с процессором mixo что и в INTERNAL.
EXTERNAL_CRYPTO: вытаскивате 2 метода TRC и ERC. И в случае с USDT вы показываете на выбор юзеру только 2 метода на выбор. С другими монетами вы не будете давать юзеру никакого выбора.