chore(openspec): архивировать android-album-sort и синхронизировать основные спеки

android-client: +1 требование — выбор порядка карточек и направления, порядок
охватывает весь список вместе с альбомами устройства.
This commit is contained in:
iu
2026-10-16 13:27:30 +03:00
parent 8010ff26f9
commit e4fc6f0ce9
6 changed files with 234 additions and 0 deletions
@@ -0,0 +1,51 @@
# Proposal
## Why
Список альбомов в Android-клиенте упорядочивался жёстко (`ORDER BY updatedAt DESC,
title ASC` в запросе Room), а серверный порядок процедура `refresh` и вовсе теряла:
`created_at` приходил в DTO и отбрасывался при записи в кэш. Пользователь не мог ни выбрать
порядок, ни развернуть его. Дополнительно выяснилось, что выбранный порядок должен
охватывать **весь** список: альбомы устройства и серверные карточки видны вместе, а не
живут двумя независимыми блоками.
## What Changes
- Список альбомов получает выбор порядка: по времени изменения (по умолчанию), по названию
или по числу фото, плюс обратный порядок для выбранного варианта.
- Порядок применяется ко **всему списку**: карточки альбомов устройства и серверных
альбомов упорядочиваются вместе, а не двумя блоками. Связанная пара «устройство →
серверный альбом» остаётся одной карточкой устройства и участвует в общем порядке как она.
- Альбом устройства получает дату последнего изменения (самый свежий его элемент, как уже
делается при выборе обложки), поэтому вариант «по времени изменения» осмыслен и для него.
- Пара (вариант, направление) сохраняется локально на устройстве (DataStore) и применяется
при следующем запуске. Это настройка отображения: она не синхронизируется между
устройствами.
- Сортировка выполняется при сборке списка, а не запросом Room: кэш остаётся хранилищем без
собственного порядка, поэтому события реального времени не знают о выбранной сортировке.
- **BREAKING**: нет. Значения по умолчанию (по времени изменения, без обратного порядка)
сохраняют прежнее поведение.
## Capabilities
### New Capabilities
_Нет — поведение расширяет существующую способность `android-client`._
### Modified Capabilities
- `android-client`: добавляется выбор порядка карточек и направления с локальным
сохранением; фиксируется, что порядок охватывает весь список, включая альбомы устройства.
## Impact
- **Код (Android):** `domain/model/AlbumSort`, `domain/model/DeviceAlbums` (дата изменения),
`data/media/MediaStoreDeviceSource` (дата в маппинге), `data/prefs/SettingsRepository`
(порт `AlbumSortPreference` и хранение пары), `ui/albums/AlbumListItem`
(единый компаратор), `ui/albums/AlbumsViewModel`, `ui/albums/AlbumsScreen` (меню и
переключатель).
- **Схема Room:** без изменений; новые колонки не добавляются.
- **API и бэкенд:** не затрагиваются.
- **Веб-клиент:** не затрагивается, своей сортировки у него нет.
- **Не затрагивается:** подписка на персональный поток и живое обновление списка — это
отдельный change (`android-live-albums`).