Резервы

Резерв — это доступное количество средств в выбранной валюте. Он используется для предотвращения создания заявок, сумма которых превышает доступный баланс для обмена.

Если резерв установлен в off, можно создавать заявки на неограниченную сумму.


🔹 Изменение резерва при создании заявки

📉 Когда резерв уменьшается?


🔹 Получение резерва

GET /api/reserve/{code}

Права: ✅ Открыт для всех
Запрос возвращает текущий резерв для указанной валюты. Резерв при этом не конвертируется, он может быть задан в любой валюте. Данный маршрут изначально был сделан для админки, чтобы менять резерв именно в той валюте, в которой он задавался.

Параметры:


🔹 Варианты ответа

1️⃣ Резерв отключен

Резерв не учитывается при создании заявки.

Ответ:

{
   "type": "success",
   "message": null,
   "data": {
      "reserveType": "off",
      "reserveCurrency": null,
      "value": null,
      "exchangeName": null
   },
   "action": null
}

2️⃣ Задан вручную (изменяемый)

Резерв устанавливается вручную и уменьшается при заявках.

Ответ:

{
   "type": "success",
   "message": null,
   "data": {
      "reserveType": "manual",
      "reserveCurrency": "RUB",
      "value": 20000.0,
      "exchangeName": null
   },
   "action": null
}

3️⃣ Резерв из файла (изменяемый)

Резерв загружается из файла (reserve.json) и уменьшается при создании заявки.

Ответ:

{
   "type": "success",
   "message": null,
   "data": {
      "reserveType": "fromFile",
      "reserveCurrency": "USDT",
      "value": 500.0,
      "exchangeName": null
   },
   "action": null
}

4️⃣ Резерв с биржи (автоматический, НЕ изменяется)

Резерв запрашивается с биржи и не изменяется вручную.
Чтобы использовать этот тип резерва, нужно добавить API-ключ для биржи.
В данный момент поддерживается только Bybit и Mexc.

Ответ:

{
   "type": "success",
   "message": null,
   "data": {
      "reserveType": "fromExchange",
      "reserveCurrency": "USDT",
      "value": 500.0,
      "exchangeName": "Bybit"
   },
   "action": null
}

GET /api/user/reserve

Права: ✅ Открыт для всех
Запрос возвращает текущий резерв для указанной валюты.
Этот маршрут всегда возвращает результат в базовой валюте. Например, для валюты BTC мы задали резерв в DOGE. Но получим результат, который будет пересчитан в BTC по текущему курсу. Если резерв не задан, ошибки не будет, получим 0.

Параметры:

Ответ:

{
   "type": "success",
   "message": null,
   "data": {
      "reserve": 500.0      
   },
   "action": null
}

🔹 Получение резерва для всех валют

GET /api/reserves

Права: ✅ Открыт для всех
Запрос возвращает список резервов для всех валют.
В этом режиме reserveType может принимать значение error. Это сделано для того, чтобы при ошибке резерва по одной валюте резервы по другим валютам продолжали загружаться.

Ответ:

{
   "type": "success",
   "message": null,
   "data": {
      "RUB": {
         "reserveType": "manual",
         "reserveCurrency": "RUB",
         "value": 500
      },
      "EUR": {
         "reserveType": "manual",
         "reserveCurrency": "EUR",
         "value": 10
      },
      "TON": {
         "reserveType": "error",
         "reserveCurrency": null,
         "value": null
      },
      "ETH": {
         "reserveType": "fromFile",
         "reserveCurrency": "USDT",
         "value": 1000
      }
   },
   "action": null
}

🔹 Установка резерва

POST /api/reserve/{code}

Права: 🔴 админка, isEditReserve
Позволяет установить резерв. Можно отправить один из четырёх вариантов:

Параметры:
code - валюта, для которой нужно задать резерв.

Запрос: POST api/reserve/RUB

{
   "reserveType": "manual",
   "reserveCurrency": null,
   "value": 20000,
   "exchangeName": ""
}

Ответ:

{
  "type": "success",
  "message": "Резерв для валюты RUB обновлен",
  "data": null,
  "action": null
}

🔹 Обновление резерва

POST /api/reserve/update/{code}

Права: 🔴 админка, isEditReserve
Позволяет заново перечитать резерв из файла.
По мере создания новых заявок, если выбрана опция "Из файла", резерв уменьшается.

Запрос: POST api/reserve/update/ETH

Ответ:

{
  "type": "success",
  "message": "Резерв из файла для ETH обновлен вручную: 3000.0 USDT",
  "data": null,
  "action": null
}