Перейти к содержимому

POST /api/spaces/:id/edges — Добавить связь

Сгенерировано из матриц + кода. Правки вносить в источники (docs/matrices/, server/routes/), не здесь.

ПолеЗначение
HTTPPOST /api/spaces/:id/edges
AuthrequireSpacemanOrOrgAdmin — requireSpacemanOrOrgAdmin
Scope токенаread_write
PG-функцииapi.add_space_edge
Таблицыspace_edge_overlay
SRMSRM-261
RP (права)
Файл роутаserver/routes/spaces.js
Статусdone

Аргументы запроса (best-effort из хендлера; путь-параметры опущены):

АргументГдеОбяз.Заметка
source_idbodyподтвердить
target_idbodyподтвердить

Коды ответов/ошибок (из хендлера): 400 (+ 200) — уточнить причины вручную

Для человека

Как открыть: вкладка «Спейсы» → откройте спейс → «Настройки спейса» → раздел «Связи» → добавьте связь, указав блок-источник и блок-приёмник.

Добавляет связь между двумя блоками графа этого спейса: источник → приёмник. Связь живёт в оверлее спейса и не трогает саму коллекцию. Логика умная: если такой связи в коллекции нет — она добавляется как кастомная (помечается op=add); если связь в коллекции была, но раньше вы её в спейсе скрыли — добавление просто снимает скрытие, и связь снова видна. Связь блока с самим собой и связь между несуществующими блоками не пройдут.

Кто может. Только менеджер спейса (спейсмен) и администратор организации (RP-132). Сотрудник и наблюдатель связи не меняют. Точные правила — RP.

Для агента

Запись — нужен токен со scope read_write (см. Конвенции). Вызов идёт под ролью владельца токена: добавить связь сможет только токен спейсмена этого спейса или org_admin его организации — иначе route-guard requireSpacemanOrOrgAdmin вернёт 403. Путь занесён в write-allowlist agent-gate как SPACE_EDGE_ADD (server/auth/agentGate.js), и именно эта exact-match запись и есть граница доступа: PG-функция своей проверки прав не делает.

Путь-параметр: :id — UUID спейса.

Тело запроса (JSON):

ПолеТипОбяз.Назначение
source_idstringдаid блока-источника спейса
target_idstringдаid блока-приёмника спейса

source_id и target_id — это id блоков спейса из списка блоков. Оба обязательны: без любого из них — 400 ({"error":"source_id и target_id обязательны"}).

Пример запроса:

Окно терминала
curl -X POST https://specbuilder.vnimanie.ai/api/spaces/f9e8d7c6-.../edges \
-H "Authorization: Bearer tak_..." \
-H "Content-Type: application/json" \
-d '{"source_id":"FEATURE_STORE","target_id":"MODEL_TRAINING"}'

Ответ 200:

{ "ok": true }

Коды ошибок: 400 — нет source_id/target_id, либо источник равен приёмнику (INVALID_EDGE), либо такого блока в спейсе нет (BLOCK_NOT_FOUND); 403 — роль не позволяет. Ответ — всегда JSON ({ ok: true }); Markdown-зеркала и ETag у мутации нет. Проверить результат можно перечитав список связей.

Связанные