POST /api/projects/:id/doc-content/:nodeId/restore/:version — Восстановить версию блока
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | POST /api/projects/:id/doc-content/:nodeId/restore/:version |
| Auth | optionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write) |
| Scope токена | read_write |
| PG-функции | api.restore_block_doc_version |
| Таблицы | block_doc_content, block_doc_content_history |
| SRM | SRM-204 |
| RP (права) | RP-116 |
| Файл роута | server/routes/projects.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
аргументов не обнаружено (подтвердить вручную по server/routes/projects.js)
Коды ответов/ошибок (из хендлера): 400, 403, 404, 500 (+ 200) — уточнить причины вручную
Для человека
Как открыть: откройте проект → вид «Дизайн-документ» → блок → стрелками навигатора версий долистайте до нужной версии и нажмите «Восстановить». Это же действие срабатывает при отмене инлайн-коррекции (Ctrl+Z / «Отменить») — откатывает блок к версии до правки.
Делает выбранную старую версию текущим содержимым блока. Восстановление не удаляет историю: текущий текст перед заменой сам уходит в историю, а на его место встаёт копия старой версии с новым, очередным номером и пометкой «восстановление». То есть откат всегда обратим — позже можно так же вернуться к любой версии.
Несуществующий номер версии — ошибка «версия не найдена».
Кто может. Восстановить версию может только владелец проекта — сотрудник, чей это проект (RP-116). Менеджер спейса, наблюдатель и администратор организации чужой документ не откатывают; гость — только если проект его собственный.
Для агента
Запись — нужен токен со scope read_write (см. Конвенции). Кроме доступа к проекту хендлер требует уровень write: токен с доступом только на чтение проекта получит 403. Под гостевым доступом восстановление разрешено лишь владельцу проекта.
Путь-параметры:
| Параметр | Назначение |
|---|---|
:id | UUID проекта |
:nodeId | id блока (ноды) |
:version | номер версии, которую делаем текущей (целое ≥ 1) |
Тела запроса нет — что восстанавливать, задаёт :version в пути. Нечисло или < 1 → 400, отсутствующая версия → 404.
Пример запроса:
curl -X POST https://specbuilder.vnimanie.ai/api/projects/{id}/doc-content/{nodeId}/restore/2 \ -H "Authorization: Bearer tak_..."Ответ 200 — идентификатор и новый номер версии (не тот, что восстанавливали):
{ "id": 415, "version": 4 }Операция неразрушающая: текст версии 2 копируется в текущий блок как новая версия 4 с edit_type = restore, а прежний текущий уходит в историю. Поэтому в ответе version — следующий по счёту номер, а не 2. После восстановления свежий список версий можно перечитать через историю блока, а текущее содержимое — через получение блока.
Формат. Только JSON; Markdown-зеркала и ETag/304 у мутации нет. Блок affordances в ответе не строится (server/agent/affordances.js).