feat(web): офлайн-режим с кешем эскизов и превью

Добавлен service worker: оболочка приложения, ответы API и варианты
изображений (эскиз, превью, средний) сохраняются в офлайн-кеше браузера.
Ключ кеша картинки — путь объекта без подписи, поэтому обновление подписи
не плодит записи; оригиналы и видео не кешируются. Кеш ограничен по размеру
и вытесняет старые записи, при выходе из аккаунта очищается, а в верхней
панели появляется индикатор «Офлайн».

Добавлен манифест PWA; манифест отдаётся с типом application/manifest+json.
This commit is contained in:
iu
2026-10-20 22:27:24 +03:00
parent 961dff15da
commit afaaaab5f0
9 changed files with 373 additions and 1 deletions
+29
View File
@@ -746,3 +746,32 @@ SHALL открывать режим просмотра.
#### Scenario: Удаление альбома
- **WHEN** пользователь удаляет альбом с фото
- **THEN** его фото попадают в корзину, а число элементов корзины в рейле увеличивается на их количество
### Requirement: Офлайн-режим веб-приложения
Веб-приложение SHALL хранить в офлайн-кеше браузера оболочку приложения, ответы API
(списки альбомов и фото) и варианты изображений: эскиз, превью и средний вариант.
Ключ кеша картинки SHALL определяться путём объекта без подписи, чтобы обновление подписи
не создавало новые записи. Оригиналы и видео SHALL не кешироваться. Размер кеша SHALL быть
ограничен, а более старые записи SHALL вытесняться первыми. При выходе из аккаунта кеш
SHALL очищаться. При отсутствии сети приложение SHALL открываться и показывать сохранённые
данные, а верхняя панель SHALL показывать индикатор «Офлайн».
#### Scenario: Просмотр без сети
- **WHEN** пользователь открывает ранее просмотренный альбом без подключения к сети
- **THEN** приложение открывается, показывает сохранённый список фото и их эскизы
#### Scenario: Смена подписи объекта
- **WHEN** подпись объекта обновляется, а содержимое остаётся прежним
- **THEN** используется та же запись кеша, а не новая
#### Scenario: Ограничение кеша
- **WHEN** кеш картинок превышает предел
- **THEN** самые старые записи вытесняются, а свежие остаются
#### Scenario: Выход из аккаунта
- **WHEN** пользователь выходит из аккаунта
- **THEN** офлайн-кеш картинок и данных очищается
#### Scenario: Индикатор офлайна
- **WHEN** браузер сообщает об отсутствии сети
- **THEN** верхняя панель показывает индикатор «Офлайн»