GET /api/projects/:id/doc-content/:nodeId — Содержимое блока
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | GET /api/projects/:id/doc-content/:nodeId |
| Auth | optionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write) |
| Scope токена | read |
| PG-функции | api.get_block_doc_content |
| Таблицы | block_doc_content |
| SRM | SRM-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-7version: 3updated: 2026-06-10T12:30:00Zgenerated_by: llm_full
```textРаздел описывает источники данных и пайплайн загрузки...```Для незаполненного блока зеркало короткое: заголовок + строка exists: false. У ресурса есть ETag (из updated_at); повтор с If-None-Match → 304 без тела (server/agent/negotiate.js).
Изменить блок руками — PATCH блока; сгенерировать текст — генерация блока.