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

Версионирование проекта

Версионирование — это автоматическая история снимков проекта с возможностью отката к любой сохранённой версии. По принципу работы напоминает Workflow history в n8n: каждое сохранение проекта фиксирует его состояние, а позже можно вернуться к нужному снимку одним нажатием.

Как это работает​

При каждом сохранении проекта (обновление поля data) сервер автоматически создаёт снимок — запись со слепком всех данных проекта (ноды, листы, настройки). Снимок сопровождается метаданными:

  • Дата создания — когда был сделан снимок.
  • Метка — имя проекта на момент сохранения.
  • Автор — пользователь, сохранивший проект (если известен).

Создание снимка не блокирует сохранение проекта: если по какой-то причине снимок не удалось записать, основное сохранение всё равно проходит, а ошибка попадает только в лог сервера.

Где хранится​

Снимки хранятся в отдельной таблице базы данных project_versions. Само состояние проекта лежит в колонке snapshot типа jsonb. Каждая запись привязана к проекту через project_id с каскадным удалением — при удалении проекта вся его история версий удаляется автоматически.

Лимит версий​

Хранятся последние 30 версий каждого проекта. После создания нового снимка более старые версии сверх лимита автоматически удаляются (по дате создания). Это удерживает размер истории под контролем и не даёт таблице бесконтрольно расти.

Откат к версии​

Вкладка «История версий» в боковой навигации редактора показывает список снимков от новых к старым. У каждой версии есть кнопка «Восстановить»:

  1. Выбранный снимок записывается обратно в проект.
  2. Синхронизируется таблица контента _content, а боту отправляется сигнал на перезагрузку.
  3. Холст редактора перезагружается из восстановленной серверной версии, локальные несохранённые изменения сбрасываются.

API​

  • GET /api/projects/:id/versions — список версий проекта (только метаданные, без тяжёлого снимка).
  • POST /api/projects/:id/versions/:versionId/restore — восстановить проект из указанной версии.

Оба маршрута защищены проверкой готовности БД и доступа к проекту.