Документация Корзина

Корзина (мягкое удаление)

Каждое удаление мока, коллекции API-тестов, сессии рекордера, контракта, fuzz-конфига, тест-плана, расписания,
вебхука или подписки вебхука, подписки или привязки канала уведомлений, CI-триггера или настройки запуска CI,
шаблона сканирования безопасности, сохранённого представления папок тест-кейсов или комментария к шагу
в Mockarty не удаляет запись сразу — элемент перемещается
в Корзину пространства имён с окном восстановления. Пока окно не
истекло, элемент можно восстановить вместе со всеми зависимыми строками,
удалёнными в том же каскаде. После истечения окна Mockarty очищает
записи автоматически; администраторы могут запустить очистку вручную.

Эта страница охватывает:

  • Как работает мягкое удаление (что видит пользователь, что реально
    хранится)
  • Настройки хранения — переопределения для пространства имён и
    глобальные значения по умолчанию
  • Восстановление одной каскадной группы или нескольких
  • Ручная очистка (необратимая) и фраза подтверждения
  • Ролевой доступ (кто может видеть / восстанавливать / очищать)

Ищете форму вызова CLI / SDK / API? См.
Рецепты API и CLI для Корзины.

Как работает мягкое удаление

При удалении сущности из UI, CLI или через API:

  1. Mockarty проставляет closed_at / closed_by и опциональный
    closed_reason — строка остаётся в базе.
  2. Зависимые строки (например, моки цепочки, расписания и вебхуки
    тест-плана) мягко удаляются в той же транзакции и получают общий
    cascade_group_id. Восстановление группы возвращает все элементы
    одновременно.
  3. Элемент сразу исчезает из обычных списков — он виден только в
    Корзине.

Некоторые записи закрываются в ходе обычной работы, а не удаляются вами, поэтому в Корзине их нет —
но и копиться они не будут: Mockarty удаляет их по тому же сроку хранения. Это удалённые агенты,
снявшие регистрацию при остановке, политики уведомлений, сброшенные к унаследованным, и процессы
тест-кейсов (вместе с состояниями), заменённые применением другого пресета.

Доступ к Корзине

Веб-UI — вид namespace: откройте боковое меню и нажмите Корзина
(или перейдите на /ui/trash напрямую). Страница отфильтрована по
namespace, выбранному в селекторе в шапке.

Веб-UI — глобальный вид (admin / support): платформенные админы и
пользователи поддержки видят в меню дополнительный пункт
Корзина (все) (/ui/admin/trash). Используется та же страница с
переключателем scope в заголовке — можно быстро переходить между видом
namespace и глобальным.

CLI:

mockarty-cli trash list
mockarty-cli trash summary

Платформенный вид в CLI: добавьте --admin, чтобы получить список
по всем namespace. Роль поддержки видит все namespace, но не может
очищать безвозвратно.

Прогулка по UI

После загрузки страницы вы видите три зоны:

  1. Шапка — счётчик общего числа записей, чип по каждому типу
    сущности (клик по чипу фильтрует таблицу), кнопки Обновить и
    Настройки хранения.
  2. Панель фильтров — поиск по имени/ID, фильтр типа, диапазон дат и
    фильтр по логину или UUID удалившего пользователя.
  3. Таблица — в каждой строке: имя, бейдж типа, namespace, кто и
    когда удалил, причина (если указана). Кнопки Восстановить и
    Удалить навсегда открывают диалог подтверждения по конкретной
    строке. При выборе нескольких строк чекбоксами сверху появляется
    панель массовых действий с кнопками Восстановить выбранное и
    Удалить выбранное.

На узких экранах таблица автоматически превращается в карточки, чтобы
страница оставалась удобной с планшета или телефона.
Если фильтры не находят записей, страница показывает Совпадений нет;
измените или очистите фильтры, чтобы увидеть остальные записи корзины.

Восстановление записи

Нажмите Восстановить в строке (или выделите несколько строк и
нажмите Восстановить выбранное). Диалог подтверждает операцию и
предлагает свободное поле Причина, которое попадает в журнал
аудита. Восстановление идемпотентно — повторный запуск по той же
каскадной группе не вызывает побочных эффектов.

Окончательное удаление (purge)

Purge необратим. При нажатии Удалить навсегда (или Удалить
выбранное
) Mockarty показывает красный диалог с числом каскадных
групп, которые будут удалены, и требует ввести фразу подтверждения
точно в таком виде:

I understand this is permanent

Кнопка Удалить навсегда остаётся заблокированной, пока фраза не
введена точно; бэкенд отклоняет любое другое значение с HTTP 400.
Поле Причина (опционально) попадает в журнал аудита — используйте
его для GDPR-запросов или инцидент-тикетов.

Настройки хранения

Нажмите Настройки хранения в шапке. Диалог показывает:

  • Переключатель Корзина включена — отключив корзину, вы
    отправляете удаления мимо retention-окна (не рекомендуется в
    регулируемых средах).
  • Срок хранения (дней) — слайдер 1–365 с парным числовым полем.
    Владельцы namespace могут переопределить глобальное значение;
    платформенные админы задают глобальное значение из scope
    Все namespace.
  • Планировщик retention → Запустить сейчас (только admin scope) —
    запускает автоматическую очистку немедленно; удобно для ops-проверки
    или после уменьшения retention-окна. Только лидер кластера выполняет
    тик; follower-узлы возвращают 503 с подсказкой и не делают работу.

Настройки хранения

Два уровня:

  • Глобальные значения — применяются, когда у пространства имён нет
    собственных настроек. По умолчанию: 7 дней, включено. Настраивается
    в Admin → Настройки хранения или командой mockarty-cli trash settings set --global --retention-days N --enabled.
  • Переопределения пространства имён — задаются в Настройки →
    Корзина → Хранение (требует роль владельца) или
    mockarty-cli trash settings set --retention-days N --enabled.

Ограничения:

  • retention_days должен быть в диапазоне 1..365.
  • enabled=false полностью отключает очистку для области — записи
    накапливаются бесконечно. Подходит только для forensic-пространств.

Если пространство наследует глобальные значения, GET /api/v1/namespaces/:ns/trash/settings возвращает "inherited": true и
глобальные значения. Как только сохраняется переопределение —
inherited становится false.

Тот же срок действует и для удалённых объектов, которые в корзину не попадают
и не восстанавливаются, — например, комментариев, сохранённых фильтров и
представлений, дашбордов и виджетов, UI-тестов и их эталонов, спринтов и
списаний времени. Из продукта они исчезают сразу после удаления, а из базы
удаляются окончательно по истечении срока хранения (или никогда, пока очистка
для пространства имён выключена).

Восстановление

Любое восстановление идемпотентно — повторный вызов возвращает
restored_count=0, а не ошибку.

Восстановление одной каскадной группы (кнопка в UI, CLI или SDK):

mockarty-cli trash restore <cascade-id>

Массовое восстановление — несколько id (мультивыбор в UI, CSV в CLI,
cascade_group_ids в SDK):

mockarty-cli trash restore cg-abc,cg-def --reason "откат ошибочной чистки"

Ответ на массовый вызов имеет формат 207-подобной структуры:

{
  "restored":  [{ "cascade_group_id": "cg-abc", "entity_type": "mock", "restored_count": 4 }],
  "failed":    [{ "cascade_group_id": "cg-def", "error": "parent container still deleted" }],
  "not_found": ["cg-xyz"]
}

Типичные ошибки восстановления

  • parent container still deleted — сущность зависит от другой строки,
    которая тоже в Корзине. Сначала восстановите родителя (UI подсказывает
    автоматически).
  • retention expired — окно восстановления закрылось; запись уже
    удалена безвозвратно.
  • conflict — существует активная запись с таким же бизнес-ключом
    (например, тот же mock id). Переименуйте или удалите её и повторите.

Очистка (НЕОБРАТИМО)

Очистка навсегда удаляет строки из базы данных — восстановление
невозможно
. Mockarty периодически запускает планировщик ретеншна и
удаляет просроченные записи автоматически; ручная команда нужна только
чтобы:

  • Проактивно освободить место до истечения окна
  • Выполнить запрос субъекта на удаление данных (GDPR и пр.)
  • Разблокировать владельца пространства при превышении лимита строк

Фраза подтверждения

Любая ручная очистка требует ввода точной фразы I understand this is permanent (без изменений регистра и без пробелов по краям). UI
показывает её в диалоге подтверждения; CLI и SDK проверяют её до
отправки запроса. Если фраза отсутствует или неверна — запрос
отклоняется локально, до API.

CLI

Интерактивно:

mockarty-cli trash purge <cascade-id>
# CLI запросит фразу, завершится с ненулевым кодом при несовпадении

Неинтерактивно (CI / скрипты) — добавьте --yes:

mockarty-cli trash purge cg-abc,cg-def --yes --reason "GDPR запрос #4421"

Полностью очистить корзину

Чтобы навсегда удалить все элементы корзины за один шаг — без
предварительного получения списка id — используйте trash empty. Сервер
сам находит все мягко удалённые элементы в области видимости и удаляет их
пакетами, пока корзина не опустеет. Это работает даже для корзин с
десятками тысяч элементов (один вызов purge ограничен по размеру
запроса).

# Текущее пространство имён
mockarty-cli trash empty --namespace team-orders

# По всей платформе (только администратор платформы)
mockarty-cli trash empty --admin --yes --reason "очистка перед релизом"

То же действие доступно в UI кнопкой Очистить корзину. Если сначала
задать поиск или фильтр по типу, дате либо удалившему пользователю,
кнопка удалит только подходящие элементы. Подтверждение показывает
минимальное число видимых элементов: совпадения могут оставаться за
пределами текущей страницы. UI продолжает удаление ограниченными
пакетами, пока подходящих элементов не останется, и сообщает об ошибках.
Без фильтров UI обновляет счётчик перед открытием подтверждения. Если во
время подтверждённой операции переключить пространство имён, оставшиеся
пакеты продолжат выполняться в подтверждённом пространстве.

Ручной тик ретеншна (только админ)

Принудительно запустить планировщик ретеншна сразу по всем
пространствам:

mockarty-cli trash purge-now

Возвращает число удалённых строк и количество просмотренных пространств.
При ошибке хотя бы одного ресурса запрос сообщает об ошибке. Предыдущие
удаления могли выполниться: перед повтором проверьте корзину.

Ролевой доступ

Роль Просмотр Восстановить Очистить Сменить ретеншн
Viewer пространства Да Нет Нет Нет
Editor пространства Да Да Нет Нет
Owner пространства Да Да Да Да (пространство)
Платформенная поддержка Да (все NS) Да (все) Да (все) Да (пространство)
Платформенный админ Да (все NS) Да (все) Да (все) Да (глобально + пространство)

Платформенная поддержка и админ оба очищают данные кросс-NS — используйте
роль, которую вам выдали; журнал аудита фиксирует, кто реально нажал
«Очистить». Owner пространства очищает корзину внутри своего пространства.

Журнал аудита

Каждая операция Корзины порождает запись в журнале аудита с актёром,
сущностью, cascade_group_id, причиной (если указана) и результатом.
Открыть историю: Admin → Журнал аудита, фильтр по действиям
trash_restore / trash_purge / trash_settings_update.

Связанные разделы