Новое требование в phone-album-sync о потере/возврате серверной копии у разгруженного превью, требование в android-client о метке потерянного элемента и действии удаления с устройства.
4.3 KiB
4.3 KiB
Tasks
1. Доменное состояние и политика
- 1.1 Добавить
LocalAssetState.ORPHANEDвandroid/.../domain/model/Sync.ktи проверить, чтоLocalAssetState.from/Room-строка корректно читают значение (unit-тест на round-trip состояния) - 1.2 Обработать
ORPHANEDвGallerySyncPolicy.decide:NONEво всех режимах, безRESTORE; проверить покрытием всех сочетаний mode × state вGallerySyncPolicyTest - 1.3 Пропускать
ORPHANEDв цикле загрузкиSyncPlanner.planнаравне сPREVIEW(не заливать превью как оригинал); проверить unit-тестомSyncPlannerTest - 1.4 Исключить
ORPHANEDизRestoreManager.restoreTargets; проверить unit-тестомRestoreManagerTest
2. Детекция и переходы синхронизации
- 2.1 В
SyncCoordinator.reconcileпомечатьORPHANEDзаписи индекса, чейserverPhotoIdотсутствует вlivePhotoIds; проверить unit-тестомSyncCoordinatorTest - 2.2 В
reconcileснимать пометкуORPHANED, еслиserverPhotoIdснова вlivePhotoIds; проверить unit-тестомSyncCoordinatorTest - 2.3 Реализовать повторную заливку вернувшегося оригинала: считать
ORPHANED, если hash из индекса/hashesOutsideснова присутствует на устройстве, и ставить обычную загрузку; проверить unit-тестом планировщика/координатора - 2.4 Убедиться, что в режиме C загруженный обратно оригинал снова разгружается обычным проходом; проверить unit-тестом координатора
3. UI: метка и действия
- 3.1 В
DeviceAlbumViewModelотдавать наборorphanedMediaIds, аserverOriginalsByMediaId/transferredMediaIdsдолжны исключатьORPHANED; проверить unit-тестом helper-функции - 3.2 Показать перечёркнутое облако (
Icons.Filled.CloudOff) дляORPHANEDв сеткеDeviceAlbumScreenс отдельнымtestTag; проверить Compose-тестом маркера - 3.3 Добавить источник
PhotoAttributeSource.OrphanedвPhotoAttributeResolver.resolve; проверить unit-тестом резолвера (приоритет надServerпри отсутствии копии) - 3.4 Для
ORPHANED-шита показать только действие «Удалить с устройства» без серверных атрибутов; проверить Compose-тестом шита - 3.5 Реализовать удаление превью с устройства через существующий delete-consent и удаление записи индекса, без запросов к серверу; проверить instrumented-тестом (файл и индекс удалены)
4. Интеграционная проверка
- 4.1 E2E: разгрузить в режиме C, удалить серверное фото, прогнать
reconcileи убедиться, что элемент сталORPHANEDс перечёркнутым облаком; проверить прогономDeviceSyncE2ETest - 4.2 E2E: вернуть оригинал на устройство и убедиться, что элемент заливается заново и снова разгружается в C; проверить прогоном
DeviceSyncE2ETest - 4.3 Прогнать
cd android && ./gradlew testиcd android && ./gradlew :app:assembleDebug; убедиться, что сборка и unit-тесты зелёные
Workflow follow-up
- Архивировать change после выполнения задач и прохождения ревью по правилам проекта.
- Проверить итоговый результат после архивации.