fix: made better and error managment on api client

This commit is contained in:
alzalia1 2025-08-20 15:22:23 +02:00
parent 0d1b5ce68e
commit 6359efa0c3
2 changed files with 106 additions and 68 deletions

View file

@ -1,7 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/rendering.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
@ -312,14 +311,18 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) {
final json = jsonDecode(response.body) as List<dynamic>; switch (response.statusCode) {
return Result.ok(json.map((element) => Bal.fromJSON(element)).toList()); case 200:
} else { final json = jsonDecode(response.body) as List<dynamic>;
throw Exception("Something wrong happened"); return Result.ok(
json.map((element) => Bal.fromJSON(element)).toList(),
);
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
debugPrint("ERROR: ${e.toString()}"); log.e(e.toString());
return Result.error(Exception(e)); return Result.error(Exception(e));
} finally { } finally {
client.close(); client.close();
@ -361,13 +364,17 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body); case 200:
return Result.ok(Book.fromJSON(json)); final json = jsonDecode(response.body);
} else { return Result.ok(Book.fromJSON(json));
throw Exception("The book was not found"); case 404:
throw "No book with this id exists in database";
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception("API $e")); return Result.error(Exception("API $e"));
} finally { } finally {
client.close(); client.close();
@ -381,13 +388,17 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body); case 200:
return Result.ok(Book.fromJSON(json)); final json = jsonDecode(response.body);
} else { return Result.ok(Book.fromJSON(json));
throw Exception("The book was not found"); case 404:
throw "No book with this EAN found in the database of BNF";
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception("API $e")); return Result.error(Exception("API $e"));
} finally { } finally {
client.close(); client.close();
@ -416,13 +427,19 @@ class ApiClient {
headers: headers, headers: headers,
body: body, body: body,
); );
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body) as List<dynamic>; case 200:
return Result.ok(json.map((el) => SearchResult.fromJSON(el)).toList()); final json = jsonDecode(response.body) as List<dynamic>;
} else { return Result.ok(
throw "Unknown Error"; json.map((el) => SearchResult.fromJSON(el)).toList(),
);
case 403:
throw "You do not own the BAL";
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception("API $e")); return Result.error(Exception("API $e"));
} finally { } finally {
client.close(); client.close();
@ -440,13 +457,19 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body) as List<dynamic>; case 200:
return Result.ok(json.map((el) => BookInstance.fromJSON(el)).toList()); final json = jsonDecode(response.body) as List<dynamic>;
} else { return Result.ok(
throw "Unknown Error"; json.map((el) => BookInstance.fromJSON(el)).toList(),
);
case 403:
throw "You do not own the BAL";
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception("API $e")); return Result.error(Exception("API $e"));
} finally { } finally {
client.close(); client.close();
@ -465,12 +488,20 @@ class ApiClient {
headers: headers, headers: headers,
body: body, body: body,
); );
if (response.statusCode == 200) { switch (response.statusCode) {
return Result.ok(response.statusCode); case 200:
} else { return Result.ok(response.statusCode);
throw "Unknown error"; case 403:
throw "You don't own one of the specified books";
case 404:
throw "One of the books was not found";
case 409:
throw "One of the books wasn't available";
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception(e)); return Result.error(Exception(e));
} finally { } finally {
client.close(); client.close();
@ -499,13 +530,14 @@ class ApiClient {
headers: headers, headers: headers,
body: body, body: body,
); );
if (response.statusCode == 201) { switch (response.statusCode) {
final json = jsonDecode(response.body); case 201:
return Result.ok(BookInstance.fromJSON(json)); final json = jsonDecode(response.body);
} else if (response.statusCode == 403) { return Result.ok(BookInstance.fromJSON(json));
throw Exception("You don't own that book instance"); case 403:
} else { throw "You don't own that book instance";
throw Exception("Something wrong happened"); default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
return Result.error(Exception(e)); return Result.error(Exception(e));
@ -527,13 +559,19 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body); case 200:
return Result.ok(Owner.fromJSON(json)); final json = jsonDecode(response.body);
} else { return Result.ok(Owner.fromJSON(json));
throw Exception("The owner was not found"); case 403:
throw "You do not own specified owner";
case 404:
throw "No owner with this id exists";
default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception("API $e")); return Result.error(Exception("API $e"));
} finally { } finally {
client.close(); client.close();
@ -547,13 +585,15 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body); case 200:
return Result.ok(Owner.fromJSON(json)); final json = jsonDecode(response.body);
} else { return Result.ok(Owner.fromJSON(json));
throw "Unknown error"; default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} catch (e) { } catch (e) {
log.e(e.toString());
return Result.error(Exception(e)); return Result.error(Exception(e));
} finally { } finally {
client.close(); client.close();
@ -568,13 +608,14 @@ class ApiClient {
try { try {
final headers = await _getHeaders(); final headers = await _getHeaders();
final response = await client.get(Uri.parse(url), headers: headers); final response = await client.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) { switch (response.statusCode) {
final json = jsonDecode(response.body) as List<dynamic>; case 200:
return Result.ok( final json = jsonDecode(response.body) as List<dynamic>;
json.map((element) => Owner.fromJSON(element)).toList(), return Result.ok(
); json.map((element) => Owner.fromJSON(element)).toList(),
} else { );
throw Exception("Invalid request"); default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} on Exception catch (error) { } on Exception catch (error) {
return Result.error(error); return Result.error(error);
@ -604,14 +645,16 @@ class ApiClient {
headers: headers, headers: headers,
body: jsonEncode(body), body: jsonEncode(body),
); );
if (response.statusCode == 201) { switch (response.statusCode) {
final json = jsonDecode(response.body); case 201:
return Result.ok(Owner.fromJSON(json)); final json = jsonDecode(response.body);
} else { return Result.ok(Owner.fromJSON(json));
throw Exception("Invalid request"); default:
throw "Unknown error with code ${response.statusCode.toString()}";
} }
} on Exception catch (error) { } catch (e) {
return Result.error(error); log.e(e.toString());
return Result.error(Exception(e));
} finally { } finally {
client.close(); client.close();
} }

View file

@ -72,11 +72,6 @@ GoRouter router(AuthRepository authRepository) => GoRouter(
); );
return NoTransitionPage(child: AddPage(viewModel: viewModel)); return NoTransitionPage(child: AddPage(viewModel: viewModel));
}, },
// routes: [
// GoRoute(path: Routes.addForm),
// GoRoute(path: Routes.addOwner),
// GoRoute(path: Routes.addPrice),
// ],
), ),
GoRoute( GoRoute(
path: Routes.sell, path: Routes.sell,