From aba36f5c606effbc334f090975838fc9d850e476 Mon Sep 17 00:00:00 2001 From: Onie Date: Sun, 18 Oct 2026 15:47:54 +0700 Subject: [PATCH] PRD: catat auth flow lengkap (AuthGate route sessionExpired + bedakan auth mati vs network blip) --- PRD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PRD.md b/PRD.md index e22dfb5..7bc107c 100644 --- a/PRD.md +++ b/PRD.md @@ -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). 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). -- 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). - Fix Gitea ROOT_URL (infra): link download APK sebelumnya mengarah ke IP Tailscale lama → fixed ke `https://git.gosambi.uk/`.