Database Service API — /api/v1/db

Auth: X-API-Key с permission db:query или db:*

Response envelope: формат ответа C (legacy JSON)

Важно: Raw SQL (query field) отключён. Используйте параметризованный контракт entity + action.

---

POST /api/v1/db/query

Параметризованный CRUD.

Request body:

ПолеТипОбяз.Описание
entitystringда*Имя сущности (таблицы)
actionstringда*select \insert \update \delete
fieldsstring[]нетПоля для select
filtersobject[]нетФильтры [{field, op, value}]
dataobjectнетДанные для insert/update
limitintнетdefault 100 (select)
offsetintнетdefault 0 (select)
sortobject[]нетСортировка
datasource_idstringнетID datasource, default core
databasestringнетИмя БД/схемы
transaction_idstringнетID активной транзакции

*Обязательны entity + action. Поле query (legacy SQL) возвращает 403.

Пример — select:

{
  "entity": "products",
  "action": "select",
  "fields": ["id", "name", "price"],
  "filters": [{ "field": "status", "op": "eq", "value": "active" }],
  "limit": 50,
  "offset": 0,
  "sort": [{ "field": "created_at", "direction": "desc" }]
}

Пример — insert:

{
  "entity": "orders",
  "action": "insert",
  "data": { "user_id": 42, "total": 199.99 }
}

Responses:

КодОписание
200{ "success": true, ...result }
400Ошибка выполнения / валидации
401Нет/неверный API key
403Raw SQL отключён

---

POST /api/v1/db/transaction/begin

Начало транзакции.

Request body (optional):

ПолеТипОписание
transaction_idstringUUID (генерируется если не указан)

Response 200:

{ "success": true, "transaction_id": "uuid" }

---

POST /api/v1/db/transaction/{transaction_id}/commit

Коммит транзакции.

Path: transaction_id — UUID из /begin

---

POST /api/v1/db/transaction/{transaction_id}/rollback

Откат транзакции.

---

GET /api/v1/db/transaction/list

Список активных транзакций текущего API key.

Response 200:

{
  "success": true,
  "transactions": [...],
  "count": 0
}

---

GET /api/v1/db/datasources

Список настроенных datasource. Пароли не возвращаются.

Response 200:

{
  "success": true,
  "datasources": [
    { "id": "core", "type": "postgresql", "host": "...", "port": 5432, "database": "..." }
  ],
  "count": 1
}

---

Типичный flow с транзакцией

1. POST /transaction/begin          → transaction_id
2. POST /query { ..., transaction_id }  (multiple)
3. POST /transaction/{id}/commit    или /rollback