Skip to content

Instantly share code, notes, and snippets.

@locskot
Created March 8, 2022 11:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save locskot/4886259b6aeebbe016132adee31d4de5 to your computer and use it in GitHub Desktop.
Save locskot/4886259b6aeebbe016132adee31d4de5 to your computer and use it in GitHub Desktop.
import 'dart:io';
import 'package:chopper/chopper.dart';
import 'package:driver3/extensions/chopper_ext.dart';
import 'package:driver3/models/common_response.dart';
import 'package:driver3/network/iway_api.dart';
import 'package:firebase_performance/firebase_performance.dart' as perf;
enum RequestUrl {
ResetPassword,
Auth,
LocationAuth,
FcmToken,
TripList,
Location,
Push,
ChangeStatus,
Driver,
Trip,
Dispatcher,
Payments,
ChangePayment,
PaymentStatistic,
}
abstract class AbsInteractor {
Future<CommonResult> send({Future<Response<dynamic>>? future, RequestUrl? requestUrl}) async {
final commonResponseBuilder = CommonResultBuilder();
final url = findUrl(requestUrl: requestUrl);
final httpMethod = findHttpMethod(requestUrl: requestUrl);
final metric = perf.FirebasePerformance.instance.newHttpMetric(url, httpMethod);
await metric.start();
try {
final response = await future!;
metric.httpResponseCode = response.statusCode;
if (response.is5xxError) {
commonResponseBuilder.serverException = true;
} else {
if (response.error != null) {
commonResponseBuilder.iwayError = response.iwayError;
} else {
commonResponseBuilder.data = findData(response: response, requestUrl: requestUrl);
}
}
} on SocketException {
commonResponseBuilder.socketException = true;
} on Exception {
commonResponseBuilder.serverException = true;
} finally {
await metric.stop();
}
return commonResponseBuilder.build();
}
String findUrl({RequestUrl? requestUrl}) {
String url = '$BASE_URL$V3';
switch (requestUrl) {
case RequestUrl.ResetPassword:
return url += 'driver/auth/password';
case RequestUrl.Auth:
return url += 'driver/auth/auth';
case RequestUrl.LocationAuth:
return url += 'location/auth';
case RequestUrl.FcmToken:
return url += 'drivers/current-update-device';
case RequestUrl.TripList:
return url += 'driver/trips';
case RequestUrl.Location:
return 'https://api.location.iwayex.com/v1/driver-locations';
case RequestUrl.Push:
return url += 'push-messages/batch-update-status';
case RequestUrl.ChangeStatus:
return url += 'driver/trips/{id}';
case RequestUrl.Driver:
return url += 'drivers';
case RequestUrl.Trip:
return url += 'driver/trips/{id}';
case RequestUrl.Dispatcher:
return url += 'dispatchers/{id}';
case RequestUrl.Payments:
return url += 'payments';
case RequestUrl.ChangePayment:
return url += 'payments/{id}';
case RequestUrl.PaymentStatistic:
return url += 'payments/report';
default:
throw UnimplementedError();
}
}
perf.HttpMethod findHttpMethod({RequestUrl? requestUrl}) {
switch (requestUrl) {
case RequestUrl.ResetPassword:
case RequestUrl.Auth:
case RequestUrl.LocationAuth:
case RequestUrl.FcmToken:
case RequestUrl.Location:
case RequestUrl.Push:
case RequestUrl.ChangeStatus:
case RequestUrl.ChangePayment:
return perf.HttpMethod.Post;
case RequestUrl.TripList:
case RequestUrl.Driver:
case RequestUrl.Trip:
case RequestUrl.Dispatcher:
case RequestUrl.Payments:
case RequestUrl.PaymentStatistic:
return perf.HttpMethod.Get;
default:
throw UnimplementedError();
}
}
dynamic findData({Response? response, RequestUrl? requestUrl}) {
switch (requestUrl) {
case RequestUrl.ResetPassword:
case RequestUrl.FcmToken:
case RequestUrl.Location:
case RequestUrl.Push:
return response!.success;
case RequestUrl.ChangeStatus:
case RequestUrl.Trip:
return response!.trip;
case RequestUrl.Payments:
case RequestUrl.ChangePayment:
return response!.payments;
case RequestUrl.Auth:
return response!.authToken;
case RequestUrl.LocationAuth:
return response!.locationAuthToken;
case RequestUrl.TripList:
return response!.trips;
case RequestUrl.Driver:
return response!.driver;
case RequestUrl.Dispatcher:
return response!.dispatcher;
case RequestUrl.PaymentStatistic:
return response!.paymentStatistic;
default:
throw UnimplementedError();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment