Files
ds-galo/openspec/changes/fix-copy-edit-variant-sharing/tasks.md
T
iu b075f4c3a4 chore(openspec): предложить fix-copy-edit-variant-sharing
Копирование фото переносит и отредактированную версию, хотя правка
принадлежит фото, чьи правки её породили. Изменение описывает фильтр
edit-ролей в Clone, разовую чистку копий миграцией и дельту требования
«Совместные объекты».
2026-10-21 20:31:39 +03:00

2.5 KiB
Raw Blame History

Tasks

1. Список edit-ролей

  • 1.1 В backend/internal/photos/edit_render.go собрать общий список ролей (RoleEdit, RoleEditThumb, RoleEditMedium, RoleEditPreview) и хелпер проверки роли; проверить, что список используется в обоих хранилищах и не дублируется строковыми литералами

2. Копирование без отредактированной версии

  • 2.1 В Store.Clone (backend/internal/photos/store.go) исключить edit-роли из переносимых привязок photo_objects; проверить тестом copy_test.go: копия получает обычные варианты и не получает edit-объекты
  • 2.2 В SQLiteStore.Clone (backend/internal/photos/sqlite_store.go) сделать то же для SQLite; проверить тем же тестом, прогнанным на SQLite-хранилище

3. Разовая чистка существующих копий

  • 3.1 Добавить миграцию Postgres backend/migrations/000016_*.up.sql и .down.sql, удаляющую edit-привязки у фото с пустыми edit_params; проверить на тестовой базе, что привязки исходных фото с правками остались, а «чужие» удалены
  • 3.2 Добавить миграцию SQLite backend/migrations/sqlite/000008_*.up.sql и .down.sql с тем же действием; проверить тем же сценарием на SQLite
  • 3.3 Убедиться, что удалённые объекты подбираются сборщиком мусора (ClaimGarbage не возвращает объекты с привязками); проверить существующим тестом objects_test.go

4. Интеграционная проверка

  • 4.1 Прогнать cd backend && go test ./internal/photos/ -v; убедиться, что тесты зелёные
  • 4.2 Прогнать make test; убедиться, что весь бэкенд зелёный
  • 4.3 Проверить вручную: отредактировать фото, скопировать его в другой альбом и убедиться, что копия показывает исходник, а панель правок у копии пустая