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

GET /api/projects/:id/doc-content/:nodeId — Содержимое блока

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

ПолеЗначение
HTTPGET /api/projects/:id/doc-content/:nodeId
AuthoptionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write)
Scope токенаread
PG-функцииapi.get_block_doc_content
Таблицыblock_doc_content
SRMSRM-195
RP (права)
Файл роутаserver/routes/projects.js
Статусdone

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

аргументов не обнаружено (подтвердить вручную по server/routes/projects.js)

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

Для человека

Как открыть: откройте проект → вкладка «Doc» (▧) в левой панели → разверните нужный блок документа. В раскрытом блоке вы видите то, что отдаёт этот эндпоинт.

Возвращает текст ровно одного блока — того, чей node_id указан в адресе. Это «поблочная» версия полного документа: пригодится, когда нужен один раздел, а не весь дизайн-док целиком.

Если у блока ещё нет текста, ответ не пустой и не ошибка — приходит маркер «содержимого пока нет» (поле exists: false). Вместе с текстом отдаётся номер версии и отметка последнего изменения. Доступно всем, у кого есть доступ к проекту.

Для агента

Чтение — токен со scope read (см. Конвенции). Тела нет; путь-параметры — :id (проект) и :nodeId (блок графа).

Пример запроса (Markdown-зеркало):

Окно терминала
curl https://specbuilder.vnimanie.ai/api/projects/a1b2c3d4-.../doc-content/node-7 \
-H "Authorization: Bearer tak_..." \
-H "Accept: text/markdown"

Cookie-клиент получает JSON-объект { exists, node_id, content, version, generated_by, updated_at, ... }. Если блок ещё не заполнен, объект приходит в виде { exists: false }. Токен с Accept: text/markdown (или ?format=md) получает Markdown-зеркало (server/agent/negotiate.js).

Поток Markdown (serializeDocBlock, server/agent/markdown.js) — один заголовок с идентификаторами проекта и блока, затем версия, отметка и тело в текстовом fenced-блоке:

# doc-content a1b2c3d4-.../node-7
version: 3
updated: 2026-06-10T12:30:00Z
generated_by: llm_full
​```text
Раздел описывает источники данных и пайплайн загрузки...
​```

Для незаполненного блока зеркало короткое: заголовок + строка exists: false. У ресурса есть ETag (из updated_at); повтор с If-None-Match304 без тела (server/agent/negotiate.js).

Изменить блок руками — PATCH блока; сгенерировать текст — генерация блока.

Связанные