diff --git a/lib/helpers/services/tenant_service.dart b/lib/helpers/services/tenant_service.dart index 3d9be30..750eb0c 100644 --- a/lib/helpers/services/tenant_service.dart +++ b/lib/helpers/services/tenant_service.dart @@ -63,29 +63,39 @@ class TenantService implements ITenantService { {bool hasRetried = false}) async { try { final headers = await _authorizedHeaders(); - logSafe("➡️ GET $_baseUrl/auth/get/user/tenants\nHeaders: $headers", - level: LogLevel.info); - final response = await http - .get(Uri.parse("$_baseUrl/auth/get/user/tenants"), headers: headers); - final data = jsonDecode(response.body); + final response = await http.get( + Uri.parse("$_baseUrl/auth/get/user/tenants"), + headers: headers, + ); - logSafe( - "⬅️ Response: ${jsonEncode(data)} [Status: ${response.statusCode}]", - level: LogLevel.info); - - if (response.statusCode == 200 && data['success'] == true) { - logSafe("✅ Tenants fetched successfully."); - return List>.from(data['data']); + // ✅ Handle empty response BEFORE decoding + if (response.body.isEmpty || response.body.trim().isEmpty) { + logSafe("❌ Empty tenant response — auto logout"); + await LocalStorage.logout(); + return null; } + Map data; + try { + data = jsonDecode(response.body); + } catch (e) { + logSafe("❌ Invalid JSON in tenant response — auto logout"); + await LocalStorage.logout(); + return null; + } + + // SUCCESS CASE + if (response.statusCode == 200 && data['success'] == true) { + final list = data['data']; + if (list is! List) return null; + return List>.from(list); + } + + // TOKEN EXPIRED if (response.statusCode == 401 && !hasRetried) { - logSafe("⚠️ Unauthorized while fetching tenants. Refreshing token...", - level: LogLevel.warning); final refreshed = await AuthService.refreshToken(); if (refreshed) return getTenants(hasRetried: true); - logSafe("❌ Token refresh failed while fetching tenants.", - level: LogLevel.error); return null; } @@ -130,7 +140,7 @@ class TenantService implements ITenantService { } // 🔹 Register FCM token after tenant selection - final fcmToken = LocalStorage.getFcmToken(); + final fcmToken = LocalStorage.getFcmToken(); if (fcmToken?.isNotEmpty ?? false) { final success = await AuthService.registerDeviceToken(fcmToken!); logSafe(