chore(openspec): архивировать android-live-albums и fix-album-cover-readiness
Дельта android-live-albums: android-client (+3 требования: живое обновление списка, догон при переподключении, потеря доступа) и realtime (порядок списка теперь правило отображения клиента). Дельта fix-album-cover-readiness: realtime (+1 требование: album.updated при готовности вариантов фото-обложки).
This commit is contained in:
@@ -619,3 +619,55 @@ SHALL показывать значками расположение содер
|
||||
#### Scenario: Не сопоставлено
|
||||
- **WHEN** сопоставления с серверным фото нет
|
||||
- **THEN** лист показывает локальные атрибуты и локальные действия элемента
|
||||
|
||||
### Requirement: Живое обновление списка альбомов
|
||||
Пока пользователь авторизован, приложение SHALL поддерживать персональный поток и
|
||||
применять события жизненного цикла альбома к локальному кэшу: создавать или заменять
|
||||
альбом по полученному объекту и удалять его по идентификатору, не выполняя
|
||||
дополнительный запрос списка.
|
||||
|
||||
#### Scenario: Альбом создан или изменён в другом месте
|
||||
- **WHEN** в персональный поток приходит событие создания или изменения доступного альбома
|
||||
- **THEN** альбом появляется в списке или заменяется без запроса списка
|
||||
|
||||
#### Scenario: Неизвестное событие
|
||||
- **WHEN** в персональный поток приходит событие, не относящееся к жизненному циклу альбома
|
||||
- **THEN** приложение не меняет локальный список
|
||||
|
||||
#### Scenario: Навигация между экранами
|
||||
- **WHEN** пользователь переходит с главного экрана на другой экран приложения
|
||||
- **THEN** подписка на персональный поток не пересоздаётся
|
||||
|
||||
#### Scenario: Выход из аккаунта
|
||||
- **WHEN** пользователь выходит из аккаунта
|
||||
- **THEN** подписка на персональный поток закрывается
|
||||
|
||||
### Requirement: Догон списка при переподключении персонального потока
|
||||
После восстановления персонального потока приложение SHALL приводить локальный список
|
||||
альбомов в соответствие с серверным снимком, чтобы отразить изменения, пропущенные за
|
||||
время разрыва соединения.
|
||||
|
||||
#### Scenario: Переподключение
|
||||
- **WHEN** персональный поток восстановился после разрыва
|
||||
- **THEN** приложение перезапрашивает список альбомов, удаляя из кэша альбомы, которых на сервере больше нет
|
||||
|
||||
### Requirement: Потеря доступа к альбому
|
||||
Приложение SHALL переставать отображать альбом, удалённый владельцем или ставший
|
||||
недоступным после исключения участника: альбом SHALL исчезать из локального кэша и
|
||||
списка, а экран открытого альбома SHALL возвращаться к списку.
|
||||
|
||||
#### Scenario: Альбом удалён во время просмотра
|
||||
- **WHEN** владелец удаляет альбом, пока участник просматривает экран этого альбома
|
||||
- **THEN** экран перестаёт показывать альбом и возвращается к списку
|
||||
|
||||
#### Scenario: Участник исключён
|
||||
- **WHEN** участника исключают из альбома
|
||||
- **THEN** альбом исчезает из его списка, а открытый экран возвращается к списку
|
||||
|
||||
#### Scenario: Экран альбома не открыт
|
||||
- **WHEN** альбом удалён, а его экран не открыт
|
||||
- **THEN** карточка альбома исчезает из списка
|
||||
|
||||
#### Scenario: Отсутствие альбома в кэше без сети
|
||||
- **WHEN** приложение открывает экран альбома, которого нет в кэше, и сеть недоступна
|
||||
- **THEN** экран не считается потерявшим доступ и не закрывается сам
|
||||
|
||||
@@ -116,12 +116,16 @@ comment.created, like.added, like.removed, member.joined, member.left, album.upd
|
||||
|
||||
#### Scenario: Обновление альбома из списка
|
||||
- **WHEN** приходит событие обновления для альбома, который уже есть в списке клиента
|
||||
- **THEN** клиент заменяет его на месте, не меняя порядок списка
|
||||
- **THEN** клиент заменяет альбом по полученному объекту без дополнительного запроса списка
|
||||
|
||||
#### Scenario: Удаление альбома из списка
|
||||
- **WHEN** приходит событие удаления для альбома, который есть в списке клиента
|
||||
- **THEN** клиент убирает альбом из списка
|
||||
|
||||
#### Scenario: Порядок списка
|
||||
- **WHEN** клиент применяет событие к списку альбомов
|
||||
- **THEN** порядок элементов списка определяется правилами отображения этого клиента
|
||||
|
||||
### Requirement: Догон состояния альбомов при переподключении
|
||||
Клиент SHALL после восстановления персонального потока синхронизировать список альбомов
|
||||
через REST, чтобы отразить изменения, пропущенные во время разрыва соединения.
|
||||
@@ -165,3 +169,17 @@ comment.created, like.added, like.removed, member.joined, member.left, album.upd
|
||||
#### Scenario: Окончательное удаление фото
|
||||
- **WHEN** фото удаляется окончательно
|
||||
- **THEN** владелец и участники получают `album.updated` с уменьшенным `photos_count`
|
||||
|
||||
### Requirement: Обновление альбома при готовности вариантов обложки
|
||||
Когда для фото, являющегося обложкой альбома, сгенерированы варианты, система SHALL
|
||||
публиковать `album.updated` с актуальным объектом альбома в персональные потоки владельца и
|
||||
участников: только тогда объект получает ссылку на обложку. Готовность вариантов прочих фото
|
||||
событий не порождает.
|
||||
|
||||
#### Scenario: Варианты обложки готовы
|
||||
- **WHEN** для фото, которое является обложкой альбома, сгенерированы thumb и medium
|
||||
- **THEN** владелец и участники получают `album.updated` с непустой ссылкой на обложку
|
||||
|
||||
#### Scenario: Варианты обычного фото готовы
|
||||
- **WHEN** варианты готовы для фото, которое не является обложкой альбома
|
||||
- **THEN** персональные потоки не получают `album.updated`
|
||||
|
||||
Reference in New Issue
Block a user