Skip to main content

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

Механизм создания веток настроек:

  1. Создание веток:
    • Вводится механизм создания отдельных веток настроек для конкретных задач.
    • Ветки можно мержить с основными настройками по завершении задач (аналогично git).
  2. Основные настройки:
    • Все базовые настройки относятся к ветке main.
  3. Процесс работы:
    • При начале новой задачи создается новая ветка настроек с заданным именем на основе родительской ветви.
    • По умолчанию новая ветка наследует все настройки из родительской.
  4. Изменения настроек:
    • При изменении настройки и ее сохранении формируется новая настройка с тем же ID в новой ветке.
    • Это исключает перезатирание одной настройки другой.
  5. Тестирование:
    • В любой момент можно указать тестировщику ветку с новыми настройками для тестирования.
    • Тестировщик может протестировать настройки, просто переключив ветку.
  6. Завершение работы:
    • По завершении задачи все изменения мержатся с родительской веткой.
    • Созданная ветка удаляется.

Базовая ветка всегда остается чистой, не содержит лишних настроек и готова к синхронизации с продакшеном.

 

Техническая реализация:

  1. Структура таблицы branches:
    • title: имя ветви.
    • parent: родительская ветвь.
  2. Доступ к данным:

    Данные из таблицы доступны через запрос branches с привилегиями:

    • app:branches:view
    • web:branches:view
  3. Связь с другими таблицами:
    • В таблицы user_profile и settings добавлено поле branch, ссылающееся на таблицу branches.
  4. Получение настроек:
    • При получении настроек:
      • Сначала берутся настройки из текущей ветки пользователя.
      • Затем из родительской ветки.
      • Далее из родительской ветки по отношению к родительской и так далее, вплоть до ветки main или до settingTypes, если настройки отсутствуют и там.
  5. Редактирование настроек:
    • При редактировании настройки через левую панель:
      • Формируется новая настройка с заданным ID в текущей ветке пользователя, если она не существует.
      • Если настройка уже создана, она обновляется.
      • Если настройки с таким ID нет и в родительских ветвях, создается новая настройка с новым ID, который записывается в settings текущего пользователя.
  6. Уведомление:
    • Информация о сохраненной настройке отображается во всплывающем сообщении.

image17.png

 

В Retool добавлена задача Settings позволяющая формировать новые ветви и мержить их с родительскими: http://10.1.241.240:3000/apps/9fd9f242-3dd2-11ef-a965-8b7ae0e8ee4e/Settings

image18.png

 

Панели управления ветвями и настройками:

  1. Панель Branch:
    • Позволяет:
      • Выбрать ветвь.
      • Изменить родительскую ветвь.
      • Создать новую ветвь при необходимости.
  2. Панель Settings:
    • Отображает настройки, созданные в данной ветви.
    • Поле Branch:
      • Отражает ветвь с родительской настройкой.
      • Если поле пусто, значит базовой настройки нет, и используется settingTypes.defaultValue.
    • Поле eq:
      • Отражает равенство базовой и модифицированной настроек.
  3. Панель Users:
    • Отображает пользователей, использующих данную ветвь настроек.
  4. Панель редактора:
    • Отображает:
      • Исходный вид выбранной настройки (слева).
      • Модифицированную настройку в выбранной ветви (справа).
  5. Слияние ветвей:
    • Перед слиянием необходимо устранить все отличия в настройках между ветвями:
      • В панели Settings в поле Eq для каждой настройки должна стоять галочка.
    • Устранить различия можно:
      • Приведя родительскую настройку к состоянию дочерней (левая панель редактора).
      • Или дочернюю к состоянию родительской (правая панель редактора).
    • Кнопка Save сохраняет изменения в настройках.
      • Если у настройки нет родительской, изменения сохраняются в settingTypes.defaultValue.
    • После устранения всех изменений становится доступной кнопка Merge branch, которая:
      • Удаляет все настройки из данной ветви.
      • Переключает всех пользователей на родительскую ветвь.
      • Удаляет ветвь из таблицы branches.
  6. Дополнительные предложения:
    • Предлагается переключать текущую ветвь пользователя через форму редактирования.
    • Информация о текущей ветви может отображаться в футере.

image19.png