From 0b89ea91b793d38365acd2b5736f91ddbb006d06 Mon Sep 17 00:00:00 2001 From: "taha.alam" Date: Wed, 25 Sep 2024 16:00:31 +0300 Subject: [PATCH] WD: firebase firestore added and url and response mapping added --- lib/client/base_app_client.dart | 30 +++++++++++++++++++++++++++--- lib/utils/exception_report.dart | 19 +++++++++++++++++++ pubspec.yaml | 1 + 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 lib/utils/exception_report.dart diff --git a/lib/client/base_app_client.dart b/lib/client/base_app_client.dart index 6888f1de..06b25072 100644 --- a/lib/client/base_app_client.dart +++ b/lib/client/base_app_client.dart @@ -8,6 +8,7 @@ import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/core/service/NavigationService.dart'; import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart'; import 'package:doctor_app_flutter/utils/dr_app_shared_pref.dart'; +import 'package:doctor_app_flutter/utils/exception_report.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart' as http; @@ -130,6 +131,8 @@ class BaseAppClient { final int statusCode = response.statusCode; if (statusCode < 200 || statusCode >= 400) { onFailure(Utils.generateContactAdminMsg(), statusCode); + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: "$statusCode"); } else { var parsed = json.decode(response.body.toString()); if (parsed['ErrorType'] == 4) { @@ -141,11 +144,13 @@ class BaseAppClient { if(parsed['ErrorCode'] =='699'){ onSuccess(parsed, statusCode); }else { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed)); onFailure(getError(parsed), statusCode); } } else if (!isAllowAny) { await Provider.of(AppGlobal.CONTEX, listen: false).logout(); - + //todo nofailure is placed here and but have to handle the response here as well Utils.showErrorToast('Your session expired Please login again'); locator().pushNamedAndRemoveUntil(ROOT); } @@ -153,11 +158,15 @@ class BaseAppClient { onFailure(getError(parsed), statusCode); } } else if (parsed['MessageStatus'] == 1) { - if (!parsed['IsAuthenticated']) + if (!parsed['IsAuthenticated']) { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed)); onFailure(getError(parsed), statusCode); - else + } else onSuccess(parsed, statusCode); } else { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed)); onFailure(getError(parsed), statusCode); } } @@ -291,6 +300,8 @@ class BaseAppClient { if (parsed != null) { onSuccess(parsed, statusCode); } else { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed)); onFailure(getError(parsed), statusCode); } } @@ -302,11 +313,18 @@ class BaseAppClient { } else { if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { if (parsed['ErrorSearchMsg'] == null) { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: "Server Error found with no available message"); + onFailure("Server Error found with no available message", statusCode); } else { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['ErrorSearchMsg']); onFailure(parsed['ErrorSearchMsg'], statusCode); } } else { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); } } @@ -315,8 +333,14 @@ class BaseAppClient { onSuccess(parsed, statusCode); } else { if (parsed['message'] != null) { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['message'] ); + onFailure(parsed['message'] ?? parsed['message'], statusCode); } else { + if(body['DoctorID'] !=null ) + postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); } } diff --git a/lib/utils/exception_report.dart b/lib/utils/exception_report.dart new file mode 100644 index 00000000..f49eba7e --- /dev/null +++ b/lib/utils/exception_report.dart @@ -0,0 +1,19 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; + +void postFailureResponse({ + required String doctorId, + required String url, + required String request, + required String response, + required String exception, +}) async { + Map data = { + "url" : url, + "request" : request, + "response" : response, + "exception" : exception + }; + final firestore = FirebaseFirestore.instance; + final collectionRef = firestore.collection(doctorId); + await collectionRef.add(data); +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 7737d33c..2070e8c1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -76,6 +76,7 @@ dependencies: # Firebase firebase_messaging: ^14.7.5 firebase_analytics : ^10.7.1 + cloud_firestore: ^4.17.5 #GIF image # flutter_gifimage: ^1.0.1