Files
transcriber/tasks/items/delete-record.md
T
av 5501384cdc tasks: упразднены цели и роадмап, объявлена стадия build
- 11 записей типа goal закрыты с причиной, называющей задачи-наследники;
  ROADMAP.md удалён, индекс остался один — BACKLOG.md;
- 33 записи переписаны: ссылка «Двигает пункты N «Завершения» цели» уступила
  место прямому утверждению — без целей номера пунктов вели в никуда;
- шапка BACKLOG.md размечена парой <!-- стадия -->, порядок строк теперь
  объявлен зависимостью, а не важностью.
2026-08-13 16:00:14 +03:00

50 lines
4.3 KiB
Markdown

# ✨ Удалять запись со всеми уровнями текста по требованию владельца
- **Тип:** feature
- **Категория:** Очередь — Удаление трогает конвейер, файлы, объект хранилища и колонку дедупликации — всё это к этому месту уже готово.
- **Зачем:** Ни файлы, ни расшифровки не удаляются вовсе: убрать запись сегодня можно только руками в базе и в каталоге на сервере.
Запись убирается одним действием вместе с файлом, объектом в хранилище и всеми
уровнями текста. Чужую запись убрать нельзя. Учёт расхода остаётся.
Удаление необратимо и потому спрашивает подтверждения. Задача, которая ещё в
работе, тоже убирается: конвейер обязан заметить исчезнувшую запись и не
продолжать её шаг.
## Затрагивает
- новый эндпоинт удаления своей записи и его код ответа;
- экран списка и экран записи: действие удаления и подтверждение;
- файл в каталоге хранения, его фрагменты и объект в Object Storage;
- строки задачи и файла в базе, а также колонка хеш-суммы, по которой ищет
дедупликация;
- `internal/service/transcribe.go` — шаги, держащие задачу захватом
(`FindAndRunConversionJob`, `FindAndRunTranscribeJob`,
`FindAndRunTranscribeCheckJob`), и захват `FindAndAcquire`;
- `docs/security.md`, «Что вне модели» — пункт про удаление данных перестаёт
быть правдой и переписывается;
- `docs/passport.md` — граница «сколько запись лежит на диске».
## Критерии приёмки
- Удаление своей записи убирает задачу, файл на диске и объект в Object
Storage, а повторное чтение отвечает «не найдено». Оракул — тест на подставном
хранилище: вызов удаления объекта один, каталог пуст, чтение даёт `404`.
- Чужая запись не удаляется по своему идентификатору. Оракул — тест под другой
учётной записью: ответ «не найдено», задача на месте.
- Строки потребления удалённой записи остаются, и сводка расхода не меняется.
Оракул — тест: сумма по владельцу до и после удаления совпадает.
- Тот же файл после удаления загружается и распознаётся заново, а не узнаётся
дедупликацией. Оракул — тест: загрузка, удаление, повторная загрузка — вторая
заводит новую задачу.
- Удаление задачи, которую держит воркер, не оставляет ни файла, ни повисшего
шага: шаг заканчивается без записи в удалённую задачу. Оракул — тест на задаче
в состоянии `transcribe` с истёкшим захватом.
## Рамки
Удаление необратимо: восстановления не делаем и корзины не заводим. Массового
удаления и удаления по сроку хранения здесь нет — только своя запись по одной.
Учёт расхода не трогается по решению человека от 2026-08-11. Берётся после
`record-ownership`: до неё неизвестно, чья запись.