Files
ds-galo/openspec/changes/archive/2026-10-12-fix-trash-counter-sync/proposal.md
T

43 lines
2.7 KiB
Markdown

# Proposal
## Why
Счётчик корзины в рейле альбомов (`trash.count`) перезагружается только при смене
маршрута и после «Очистить корзину». Любая другая операция, меняющая содержимое корзины,
не обновляет его: после удаления фото счётчик остаётся прежним, пока пользователь не
перейдёт в другой раздел. Это и есть сообщённый дефект — «при удалении фото на корзине не
меняется счётчик».
## What Changes
- Рейл SHALL обновлять число элементов корзины сразу после каждого действия, меняющего её
содержимое, без перезагрузки страницы: помещение фото в корзину (одиночное и пакетное),
восстановление, окончательное удаление, очистка корзины и удаление альбома (его фото
уходят в корзину).
- Изменения только во фронтенде: серверный `GET /api/trash/count` и семантика мягкого
удаления корректны и не меняются.
## Capabilities
### New Capabilities
Нет.
### Modified Capabilities
- `ui-workspace`: добавляется требование синхронизации счётчика корзины в рейле с
операциями, меняющими содержимое корзины, без перезагрузки страницы.
## Impact
- Frontend: `frontend/src/lib/stores/trash.svelte.ts` (способ обновления счётчика),
`frontend/src/routes/(app)/albums/[id]/+page.svelte` (пакетное удаление),
`frontend/src/lib/components/PhotoPanel.svelte` (удаление из панели/просмотра),
`frontend/src/routes/(app)/albums/[id]/photos/[photoId]/+page.svelte` (удаление в
просмотре), `frontend/src/routes/(app)/trash/+page.svelte` (восстановление и
окончательное удаление), `frontend/src/lib/components/AlbumActionsDialogs.svelte` и
`frontend/src/routes/(app)/albums/[id]/settings/+page.svelte` (удаление альбома).
- Backend: не затрагивается.
- Вне объёма: синхронизация счётчика между сессиями/устройствами через SSE (событий корзины
сервер не публикует) и Android-клиент (корзины в нём нет).