feat(photos): fix trash permanent delete and add empty trash
Permanently deleting a photo whose album was deleted failed because authorization resolved through the album. Fall back to uploader ownership when the photo is albumless. Add a bulk DELETE /trash that removes every trashed photo the caller may delete (uncapped listing) and returns the deleted count, with an «Очистить корзину» action on the trash screen.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# Spec Delta
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Корзина фото
|
||||
Удаление фото SHALL помещать его в корзину (мягкое удаление). Восстановление SHALL возвращать
|
||||
фото в его альбом. Окончательное удаление SHALL удалять запись, а объекты хранилища SHALL
|
||||
удаляться только когда на них не остаётся ссылок ни в одном альбоме. Окончательное удаление
|
||||
SHALL быть доступно и для фото без альбома (например, после удаления альбома).
|
||||
|
||||
#### Scenario: Удаление в корзину
|
||||
- **WHEN** пользователь удаляет фото
|
||||
- **THEN** фото пропадает из альбома и появляется в корзине
|
||||
|
||||
#### Scenario: Восстановление
|
||||
- **WHEN** пользователь восстанавливает фото из корзины
|
||||
- **THEN** фото возвращается в свой альбом
|
||||
|
||||
#### Scenario: Окончательное удаление без ссылок
|
||||
- **WHEN** пользователь удаляет фото из корзины навсегда, и на те же объекты нет ссылок в других альбомах
|
||||
- **THEN** запись и объекты хранилища удаляются
|
||||
|
||||
#### Scenario: Окончательное удаление при наличии ссылок
|
||||
- **WHEN** на объект хранилища ссылается копия в другом альбоме
|
||||
- **THEN** запись удаляется, а объект хранилища сохраняется
|
||||
|
||||
#### Scenario: Окончательное удаление фото без альбома
|
||||
- **WHEN** пользователь удаляет навсегда фото из корзины, у которого нет альбома
|
||||
- **THEN** запись удаляется, а операция не завершается ошибкой отсутствующего альбома
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Очистка корзины
|
||||
Пользователь SHALL иметь возможность окончательно удалить все элементы корзины одним действием.
|
||||
Система SHALL удалять только те элементы, которые пользователь вправе удалить навсегда, и SHALL
|
||||
пропускать остальные. Операция SHALL возвращать число удалённых элементов.
|
||||
|
||||
#### Scenario: Очистка корзины
|
||||
- **WHEN** пользователь очищает корзину
|
||||
- **THEN** все элементы, которые он вправе удалить навсегда, удаляются
|
||||
|
||||
#### Scenario: Чужие элементы
|
||||
- **WHEN** в корзине есть фото, которые пользователь не вправе удалить навсегда
|
||||
- **THEN** они остаются в корзине, а остальные удаляются
|
||||
|
||||
#### Scenario: Пустая корзина
|
||||
- **WHEN** пользователь очищает пустую корзину
|
||||
- **THEN** операция завершается успешно, удалив ноль элементов
|
||||
Reference in New Issue
Block a user