4 Commits
Author SHA1 Message Date
Dmitry 0708e8e88b chore(just): рецепт dev, build-web не собирает ассеты drift
ci / backend (push) Canceled after 0s
ci / backend-image (push) Canceled after 0s
ci / app (push) Canceled after 0s
ci / app-build-linux (push) Canceled after 0s
ci / app-build-windows (push) Canceled after 0s
just dev поднимает БД, миграции, сборку web и API на :8000. build-web больше не зависит от app-web-assets (sqlite3.wasm и drift_worker.js закоммичены и пересобираются вручную), в docs/ai/offline-cache.md это отражено.
2026-09-20 10:50:40 +03:00
Dmitry 600496048f fix(api): все роутеры за авторизацией, отказ от слабого JWT_SECRET, лимитер и X-Forwarded-For
get_current_user навешивается на роутер целиком, публичными остаются только health и auth (список закреплён tests/api/test_route_auth.py). API не стартует с плейсхолдером или коротким JWT_SECRET без ALLOW_DEV_SECRET=1. Лимитер логинов ограничен по числу ключей. Клиентский IP берётся из последнего хопа X-Forwarded-For.
2026-09-19 21:55:23 +03:00
Dmitry ffc5ed959a 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).
2026-09-19 12:40:08 +03:00
Dmitry 563308a08b chore: монорепо, dev-окружение и деплой
Nix flake на два шелла (backend и + Flutter), justfile как единая точка входа,
локальный Postgres в ./.pgdata на порту 54329, docker-compose из пяти сервисов
(db, api, worker, caddy, pg-backup) и CI на ruff/pyright/pytest + дрейф OpenAPI.

Российские корневые сертификаты лежат в репозитории: они публичные, но нужны и
Caddy, и gRPC-каналу T-Invest, а глобальный gitignore отбрасывает *.pem.
2026-09-18 13:43:17 +03:00