POST /api/projects/:id/restore — Восстановить проект
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | POST /api/projects/:id/restore |
| Auth | requireAuth — только авторизованный |
| Scope токена | read_write |
| PG-функции | api.restore_project |
| Таблицы | project, space |
| SRM | SRM-036, SRM-238 |
| RP (права) | RP-020 |
| Файл роута | server/routes/projects.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
| Аргумент | Где | Обяз. | Заметка |
|---|---|---|---|
restore_space | query | подтвердить |
Коды ответов/ошибок (из хендлера): 403, 409 (+ 200) — уточнить причины вручную
Для человека
Как открыть: на стартовом экране откройте вкладку «Корзина», найдите проект и нажмите «Восстановить».
Возвращает удалённый проект из корзины в список — со всем графом, в том виде, в каком он был на момент удаления.
Иногда проект находится в спейсе, который тоже удалён. Тогда восстановить проект отдельно нельзя: система спросит, восстановить ли заодно и спейс. Если согласиться — вернётся и спейс, и проект; если отказаться — проект останется в корзине.
Кто может. Восстановить проект могут его владелец и администратор. Наблюдателю корзина недоступна.
Если прав нет — ошибка доступа (403).
Для агента
Запись — нужен токен со scope read_write (см. Конвенции). Эндпоинт под requireAuth: нужен авторизованный владелец токена, гостю недоступно. Вызов идёт под его ролью.
Тела у запроса нет. Управляющий параметр — в query-строке:
| Параметр | Где | Обяз. | Назначение |
|---|---|---|---|
restore_space | query | нет | 1 (или true) — заодно восстановить родительский спейс, если он тоже в корзине |
Если родительский спейс лежит в корзине, а restore_space не передан, запрос завершится 409 SPACE_IN_TRASH — в теле придут space_id и space_name, чтобы можно было показать подтверждение и повторить запрос с restore_space=1.
Пример запроса:
curl -X POST "https://specbuilder.vnimanie.ai/api/projects/a1b2c3d4-.../restore?restore_space=1" \ -H "Authorization: Bearer tak_..."Ответ 200:
{ "id": "a1b2c3d4-...", "title": "Сервис аналитики продаж", "deleted_at": null }Если PG-функция не вернула тело, ответ — { "ok": true }. Cookie-клиент (браузер) всегда получает JSON; Markdown-зеркало отдаётся только токену с Accept: text/markdown (server/agent/negotiate.js).
Коды ошибок: 409 SPACE_IN_TRASH — родительский спейс в корзине, нужен restore_space=1 (тело: space_id, space_name); 403 — нет прав на восстановление этого проекта. Подробнее — Ошибки.