PRD: catat auth flow lengkap (AuthGate route sessionExpired + bedakan auth mati vs network blip)

This commit is contained in:
Onie
2026-10-18 15:47:54 +07:00
parent bcea28fcc4
commit aba36f5c60

2
PRD.md
View File

@@ -11,7 +11,7 @@
1. `_loadProducts()` now non-crashing saat Supabase return 401; empty server result does **not** overwrite in-memory `products` (previously `products = []` wiped the on-screen list). 1. `_loadProducts()` now non-crashing saat Supabase return 401; empty server result does **not** overwrite in-memory `products` (previously `products = []` wiped the on-screen list).
2. `_init()` no longer waits `& _initAuth()` first. Auth check now via `_ensureSessionAndAuth()`: if refresh token expired, immediately set `_sessionExpired = true`, keep `startPolling()` alive, and show a "login ulang" message. This avoids `_loadProducts()` being blocked by a 30s timeout + 401. 2. `_init()` no longer waits `& _initAuth()` first. Auth check now via `_ensureSessionAndAuth()`: if refresh token expired, immediately set `_sessionExpired = true`, keep `startPolling()` alive, and show a "login ulang" message. This avoids `_loadProducts()` being blocked by a 30s timeout + 401.
3. `_refresh()` and realtime `.stream()` products stay alive via 1-minute polling (30 default products, "Muat lebih banyak" to extend). 3. `_refresh()` and realtime `.stream()` products stay alive via 1-minute polling (30 default products, "Muat lebih banyak" to extend).
- Lanjut follow-up atas v1.3.0+6: login screen / auth flow belum disiapkan di app (menu belum ada). - **Auth flow lengkap (2026-10-18):** `login_screen.dart` + `AuthGate` (main.dart) sudah ada & ter-wiring. Dilengkapi: `AuthGate` sekarang route ke `LoginScreen` saat `state.sessionExpired` true (bukan cuma `!isLoggedIn`) — saat session mati user dipaksa login ulang, bukan nyangkut di HomePage dengan sesi mati. `_ensureSessionAndAuth()` membedakan auth benar-benar mati (`AuthException`/refresh balikin session tak valid → `sessionExpired=true`) vs network blip (error jaringan → TIDAK tandai sessionExpired, jadi tak salah-logout saat internet putus sesaat). `refresh()` stop query saat auth mati (hindari 401 sia-sia + cukup notify agar redirect). `login()` reset `sessionExpired` + langsung muat produk/riwayat (tak tunggu poll 1 menit).
- **Cleanup analyzer (2026-10-18):** `flutter analyze lib/` turun dari **20 issue → 0 issue**. Yang diperbaiki: hapus `_initAuth()` (sudah diganti `_ensureSessionAndAuth`), hapus class `_ProductCard` (tidak dipakai), hapus dead code ternary `submitting/cancelling ? null :` (variabel tidak pernah `true`) di Kasir & Riwayat, rename local var `_listenersAdded`/`_sheetController` → tanpa underscore (produk_screen), `print` → `debugPrint` (offline_queue_service), perbaiki guard `BuildContext` async (`context.mounted`/`parentContext.mounted`/`sheetContext.mounted`). Build APK debug sukses + terpasang & jalan normal di HP (tanpa crash). - **Cleanup analyzer (2026-10-18):** `flutter analyze lib/` turun dari **20 issue → 0 issue**. Yang diperbaiki: hapus `_initAuth()` (sudah diganti `_ensureSessionAndAuth`), hapus class `_ProductCard` (tidak dipakai), hapus dead code ternary `submitting/cancelling ? null :` (variabel tidak pernah `true`) di Kasir & Riwayat, rename local var `_listenersAdded`/`_sheetController` → tanpa underscore (produk_screen), `print` → `debugPrint` (offline_queue_service), perbaiki guard `BuildContext` async (`context.mounted`/`parentContext.mounted`/`sheetContext.mounted`). Build APK debug sukses + terpasang & jalan normal di HP (tanpa crash).
- Fix Gitea ROOT_URL (infra): link download APK sebelumnya mengarah ke IP Tailscale lama → fixed ke `https://git.gosambi.uk/`. - Fix Gitea ROOT_URL (infra): link download APK sebelumnya mengarah ke IP Tailscale lama → fixed ke `https://git.gosambi.uk/`.