android-client: +1 требование — выбор порядка карточек и направления, порядок охватывает весь список вместе с альбомами устройства.
4.1 KiB
4.1 KiB
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).