You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.3 KiB
Dart
128 lines
4.3 KiB
Dart
|
4 years ago
|
import 'dart:convert';
|
||
|
|
import 'dart:io';
|
||
|
|
import 'package:mohem_flutter_app/models/response_models.dart';
|
||
|
|
import 'package:mohem_flutter_app/services/secure_storage.dart';
|
||
|
|
import 'package:http/http.dart';
|
||
|
|
import 'package:injector/injector.dart';
|
||
|
|
|
||
|
|
import 'http_service.dart';
|
||
|
|
import 'network_service.dart';
|
||
|
|
|
||
|
|
abstract class IBackendApiService {
|
||
|
|
Future<BackendResponse> getUnauthenticatedAPI(String route);
|
||
|
|
|
||
|
|
Future<BackendResponse> getAuthenticatedAPI(String route);
|
||
|
|
|
||
|
|
Future<BackendResponse> postUnauthenticatedAPI(
|
||
|
|
String route, String dataAsJson);
|
||
|
|
|
||
|
|
Future<BackendResponse> postAuthenticatedAPI(String route, String dataAsJson);
|
||
|
|
|
||
|
|
Future<BackendResponse> deleteAuthenticatedAPI(String route, String id);
|
||
|
|
}
|
||
|
|
|
||
|
|
class BackendApiService implements IBackendApiService {
|
||
|
|
static String _homeUrl = "https://check.revotec.eu/check2/";
|
||
|
|
static String _serverApiBaseUrl = _homeUrl + "mapi/v1/";
|
||
|
|
|
||
|
|
static String get homeUrl => _homeUrl;
|
||
|
|
|
||
|
|
final ISecureStorage _secureStorage =
|
||
|
|
Injector.appInstance.getDependency<ISecureStorage>();
|
||
|
|
final IHttpService _httpService =
|
||
|
|
Injector.appInstance.getDependency<IHttpService>();
|
||
|
|
|
||
|
|
///internal helper functions which executes the given api call
|
||
|
|
///and wraps the response
|
||
|
|
Future<BackendResponse> _callApi(Future<dynamic> callback) async {
|
||
|
|
Response response;
|
||
|
|
try {
|
||
|
|
//execute future
|
||
|
|
response = await callback;
|
||
|
|
//check response code, and if not ok return isOk = false
|
||
|
|
//200 for Get
|
||
|
|
//201 for Post
|
||
|
|
|
||
|
|
// print("res121: " +
|
||
|
|
// response.statusCode.toString() +
|
||
|
|
// " Body:" +
|
||
|
|
// response.body.toString());
|
||
|
|
//if delete request sent so server is returning 204 in case of success.
|
||
|
|
if (response.statusCode == 204)
|
||
|
|
return BackendResponse(id: 1, isOk: true, result: null);
|
||
|
|
|
||
|
|
if (response.statusCode != 200 && response.statusCode != 201)
|
||
|
|
return BackendResponse(id: -1, isOk: false, result: null);
|
||
|
|
//if response code is good then parse message and return parsed response
|
||
|
|
return BackendResponse.fromJson(json.decode(response.body));
|
||
|
|
//return BackendResponse.fromJson(dioResponse.body);
|
||
|
|
} catch (e) {
|
||
|
|
return BackendResponse(id: -1, isOk: false, result: null);
|
||
|
|
// try {
|
||
|
|
// return BackendResponse.fromJson(json.decode(response.body));
|
||
|
|
// } catch (e) {
|
||
|
|
// return BackendResponse(id:-1, isOk:false,result: null);
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<BackendResponse> getAuthenticatedAPI(String route) async {
|
||
|
|
await checkConnection();
|
||
|
|
final token = await _secureStorage.readBearerToken();
|
||
|
|
return _callApi(_httpService.get(_serverApiBaseUrl + route, headers: {
|
||
|
|
'Content-Type': 'application/json',
|
||
|
|
'Accept': '*/*',
|
||
|
|
HttpHeaders.authorizationHeader: "Bearer $token"
|
||
|
|
}));
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<BackendResponse> getUnauthenticatedAPI(String route) async {
|
||
|
|
await checkConnection();
|
||
|
|
return _callApi(_httpService.get(_serverApiBaseUrl + route,
|
||
|
|
headers: {'Content-Type': 'application/json', 'Accept': '*/*'}));
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<BackendResponse> postAuthenticatedAPI(
|
||
|
|
String route, String dataAsJson) async {
|
||
|
|
await checkConnection();
|
||
|
|
final token = await _secureStorage.readBearerToken();
|
||
|
|
// print("res121: " + _serverApiBaseUrl + route);
|
||
|
|
return _callApi(_httpService
|
||
|
|
.post(_serverApiBaseUrl + route, body: dataAsJson, headers: {
|
||
|
|
'Content-Type': 'application/json',
|
||
|
|
'Accept': '*/*',
|
||
|
|
HttpHeaders.authorizationHeader: "Bearer $token"
|
||
|
|
}));
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<BackendResponse> postUnauthenticatedAPI(
|
||
|
|
String route, String dataAsJson) async {
|
||
|
|
await checkConnection();
|
||
|
|
return _callApi(_httpService.post(_serverApiBaseUrl + route,
|
||
|
|
body: dataAsJson, headers: {'Content-Type': 'application/json'}));
|
||
|
|
}
|
||
|
|
|
||
|
|
Future<void> checkConnection() async {
|
||
|
|
if (!(await Injector.appInstance
|
||
|
|
.getDependency<INetworkService>()
|
||
|
|
.isHostAvailable(_homeUrl))) throw NetworkException();
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Future<BackendResponse> deleteAuthenticatedAPI(
|
||
|
|
String route, String id) async {
|
||
|
|
await checkConnection();
|
||
|
|
final token = await _secureStorage.readBearerToken();
|
||
|
|
return _callApi(
|
||
|
|
_httpService.delete(_serverApiBaseUrl + route + "/" + id, headers: {
|
||
|
|
'Content-Type': 'application/json',
|
||
|
|
'Accept': '*/*',
|
||
|
|
HttpHeaders.authorizationHeader: "Bearer $token"
|
||
|
|
}));
|
||
|
|
}
|
||
|
|
}
|