Копирование фото переносит и отредактированную версию, хотя правка принадлежит фото, чьи правки её породили. Изменение описывает фильтр edit-ролей в Clone, разовую чистку копий миграцией и дельту требования «Совместные объекты».
47 lines
3.0 KiB
Markdown
47 lines
3.0 KiB
Markdown
# Proposal
|
|
|
|
## Why
|
|
|
|
Отредактированная версия фото задумана принадлежащей только тому фото, чьи правки её
|
|
породили: воркер создаёт edit-объекты с владельцем `[]string{photoID}` и комментирует
|
|
это прямо. Но копирование фото (`Clone`) переносит **все** привязки `photo_objects`,
|
|
включая роли `edit`, `edit_thumb`, `edit_medium`, `edit_preview`. Копия фото, сделанная
|
|
после рендера правок, поэтому показывает отредактированную картинку, но не наследует
|
|
`edit_params`: в панели правок у копии параметров нет, и первая же новая правка
|
|
перезаписывает исходную обработку с нуля. Поведение расходится с замыслом и с
|
|
описанием в спеке.
|
|
|
|
## What Changes
|
|
|
|
- Копирование фото перестаёт переносить отредактированную версию: в копию
|
|
попадают только обычные роли (`original`, `thumb`, `medium`, `preview`, `playback`).
|
|
- Копия фото с правками показывается в исходном виде, параметры правок копии
|
|
остаются пустыми — как и сейчас.
|
|
- Обычные варианты по-прежнему разделяются между копиями одного оригинала: правка
|
|
принадлежит фото, а не объекту.
|
|
- Спека `media-objects` приводится к этому правилу: уточняется, кому принадлежит
|
|
отредактированная версия и что происходит при копировании.
|
|
|
|
## Capabilities
|
|
|
|
### New Capabilities
|
|
|
|
Нет.
|
|
|
|
### Modified Capabilities
|
|
|
|
- `media-objects`: копирование фото не переносит отредактированную версию на копию;
|
|
отредактированная версия остаётся привязанной только к фото, чьи правки её создали.
|
|
|
|
## Impact
|
|
|
|
- `backend/internal/photos/store.go` — `Store.Clone` (Postgres): при копировании
|
|
`photo_objects` исключаются роли `edit*`.
|
|
- `backend/internal/photos/sqlite_store.go` — `SQLiteStore.Clone` (SQLite): то же
|
|
поведение.
|
|
- `backend/internal/photos/edit_render.go` — константы ролей `edit*` используются как
|
|
список исключений (без дублирования строк в двух хранилищах).
|
|
- `backend/internal/photos/copy_test.go` — тест на копию фото с отрендеренной
|
|
отредактированной версией.
|
|
- Схема БД, HTTP API и клиенты не меняются; миграций нет.
|