feat: enhance tenant fetching logic to handle empty responses and invalid JSON gracefully
This commit is contained in:
parent
87a7d19672
commit
765f537cf9
@ -63,29 +63,39 @@ class TenantService implements ITenantService {
|
|||||||
{bool hasRetried = false}) async {
|
{bool hasRetried = false}) async {
|
||||||
try {
|
try {
|
||||||
final headers = await _authorizedHeaders();
|
final headers = await _authorizedHeaders();
|
||||||
logSafe("➡️ GET $_baseUrl/auth/get/user/tenants\nHeaders: $headers",
|
|
||||||
level: LogLevel.info);
|
|
||||||
|
|
||||||
final response = await http
|
final response = await http.get(
|
||||||
.get(Uri.parse("$_baseUrl/auth/get/user/tenants"), headers: headers);
|
Uri.parse("$_baseUrl/auth/get/user/tenants"),
|
||||||
final data = jsonDecode(response.body);
|
headers: headers,
|
||||||
|
);
|
||||||
|
|
||||||
logSafe(
|
// ✅ Handle empty response BEFORE decoding
|
||||||
"⬅️ Response: ${jsonEncode(data)} [Status: ${response.statusCode}]",
|
if (response.body.isEmpty || response.body.trim().isEmpty) {
|
||||||
level: LogLevel.info);
|
logSafe("❌ Empty tenant response — auto logout");
|
||||||
|
await LocalStorage.logout();
|
||||||
if (response.statusCode == 200 && data['success'] == true) {
|
return null;
|
||||||
logSafe("✅ Tenants fetched successfully.");
|
|
||||||
return List<Map<String, dynamic>>.from(data['data']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> 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<Map<String, dynamic>>.from(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TOKEN EXPIRED
|
||||||
if (response.statusCode == 401 && !hasRetried) {
|
if (response.statusCode == 401 && !hasRetried) {
|
||||||
logSafe("⚠️ Unauthorized while fetching tenants. Refreshing token...",
|
|
||||||
level: LogLevel.warning);
|
|
||||||
final refreshed = await AuthService.refreshToken();
|
final refreshed = await AuthService.refreshToken();
|
||||||
if (refreshed) return getTenants(hasRetried: true);
|
if (refreshed) return getTenants(hasRetried: true);
|
||||||
logSafe("❌ Token refresh failed while fetching tenants.",
|
|
||||||
level: LogLevel.error);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user