feat(mobile): queue track reactions made offline and sync on reconnect (M5)

Likes and dislikes without a network are kept in a pending_reactions
table (last reaction per track wins) and sent when the connection
returns, instead of being rolled back. Downloaded track DTOs pick up the
new reaction so the offline wave and Downloads reflect it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Opus 5.5 committed 2026-10-20 13:08:36 +03:00
1 parent be34ee5361
commit 756e915ff9
5 files changed
+74 -9

No files matched your search

+2 -1
View File
@@ -67,10 +67,11 @@
`documentDirectory/offline/<owner>/`, обложка 300 px рядом; `owner` — хэш «сервер + пользователь».
Перед загрузкой берётся свежий DTO (`POST /tracks/batch`), т.к. подписанная ссылка живёт 12 ч.
- `events.ts` — sink для `EventBuffer`: при сетевой ошибке пачка уходит в `pending_events` и досылается при появлении сети.
Реакции так же: без сети — в `pending_reactions` (по треку хранится последняя), UI и DTO скачанного обновляются сразу;
ответ сервера 4xx откатывает реакцию в UI, при досылке — отбрасывает отложенную.
- Запуск без сети: `AuthSession.restore()` берёт последнего пользователя из `RefreshStore.getUser` (состояние
`signed_in` с `offline: true`); access-токен получается перед первым запросом, когда сеть вернётся.
- Офлайн-волна: если `POST /wave/sessions` не удался — перемешанные скачанные треки без дизлайков, лайки ближе к началу.
- Пока не сделано: очередь мутаций реакций без сети (лайк офлайн откатывается).
## Самообновление