Files
transcriber/tasks/items/delete-record.md
T
av faa1d7c699 tasks: заведена цель про изъятие записи из архива и задача удаления
- data-ownership — обратное право к бессрочному хранению: человек убирает свою
  запись вместе с файлом, объектом в Object Storage и всеми уровнями текста;
- delete-record закрывает все пять пунктов цели: подтверждение, необратимость,
  чужую запись не тронуть, повторная загрузка того же файла заводит новую
  задачу, а строки потребления остаются — деньги потрачены;
- docs/security.md: пункт «Удаление данных по требованию» перестал говорить,
  что задачи под это нет.
2026-08-11 10:54:43 +03:00

4.2 KiB

Удалять запись со всеми уровнями текста по требованию владельца

  • Тип: feature
  • Категория: Очередь
  • Зачем: Ни файлы, ни расшифровки не удаляются вовсе: убрать запись сегодня можно только руками в базе и в каталоге на сервере.
  • Теги: goal:data-ownership

Двигает все пять пунктов «Завершения» цели: запись убирается одним действием вместе с файлом, объектом в хранилище и всеми уровнями текста. Чужую запись убрать нельзя. Учёт расхода остаётся.

Удаление необратимо и потому спрашивает подтверждения. Задача, которая ещё в работе, тоже убирается: конвейер обязан заметить исчезнувшую запись и не продолжать её шаг.

Затрагивает

  • новый эндпоинт удаления своей записи и его код ответа;
  • экран списка и экран записи: действие удаления и подтверждение;
  • файл в каталоге хранения, его фрагменты и объект в 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: до неё неизвестно, чья запись.