Files
ds-galo/openspec/changes/archive/2026-10-16-android-album-sort/proposal.md
T
iu e4fc6f0ce9 chore(openspec): архивировать android-album-sort и синхронизировать основные спеки
android-client: +1 требование — выбор порядка карточек и направления, порядок
охватывает весь список вместе с альбомами устройства.
2026-10-16 13:27:30 +03:00

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).