feat(app): offline-кэш GET-запросов на дашборде — фаза 5

CacheInterceptor кэширует каждый успешный GET по путь+параметры в drift
(sqlite нативно, wasm+OPFS в браузере) и подменяет им сетевую ошибку;
провайдер отдаёт Cached<T>, экран показывает баннер «данные на …».
Контракт для остальных экранов — docs/ai/offline-cache.md.

flake.nix: libsecret/pkg-config для линуксовой сборки, jq/curl для
just app-web-assets (сборка sqlite3.wasm + drift_worker.js).
This commit is contained in:
Dmitry
2026-09-19 12:40:08 +03:00
parent 95cd6f176e
commit ffc5ed959a
21 changed files with 15852 additions and 60 deletions
+13 -2
View File
@@ -22,11 +22,22 @@ web:
# --- flutter ---
build-web:
build-web: app-web-assets
cd app && flutter pub get && flutter build web --release
# fetch sqlite3.wasm + compile drift_worker.js into app/web/ (offline cache, drift/wasm+OPFS —
# see docs/ai/offline-cache.md). Re-run whenever the drift/sqlite3 package versions change;
# both files are committed, so this is not needed on every build.
app-web-assets:
cd app && flutter pub get
v=$(cd app && flutter pub deps --json | jq -r '.packages[] | select(.name=="sqlite3") | .version') && \
curl -fL -o app/web/sqlite3.wasm "https://github.com/simolus3/sqlite3.dart/releases/download/sqlite3-$v/sqlite3.wasm"
d=$(jq -r '.packages[] | select(.name=="drift") | .rootUri' app/.dart_tool/package_config.json | sed 's#^file://##') && \
cd app && dart compile js -O2 --packages=.dart_tool/package_config.json -o web/drift_worker.js "$d/web/drift_worker.dart" && \
rm -f web/drift_worker.js.deps web/drift_worker.js.map
app-check:
cd app && flutter analyze && flutter test
cd app && flutter pub get && flutter analyze && flutter test
# one-off source sync against the local dev DB (zenmoney | cbr)
pull SOURCE: