|
|
- import 'package:itasmob/presentation/resources/strings_manager.dart';
- import 'package:dio/dio.dart';
-
- import 'failure.dart';
-
- enum DataSource {
- SUCCESS,
- NO_CONTENT,
- BAD_REQUEST,
- FORBIDDEN,
- UNAUTHORISED,
- NOT_FOUND,
- INTERNAL_SERVER_ERROR,
- CONNECT_TIMEOUT,
- CANCEL,
- RECEIVE_TIMEOUT,
- SEND_TIMEOUT,
- CACHE_ERROR,
- NO_INTERNET_CONNECTION,
- DEFAULT
- }
-
- class ErrorHandler implements Exception {
- late Failure failure;
-
- ErrorHandler.handle(dynamic error) {
- if (error is DioError) {
- // dio error so its error from response of the API
- failure = _handleError(error);
- } else {
- // default error
- failure = DataSource.DEFAULT.getFailure();
- }
- }
-
- Failure _handleError(DioError error) {
- switch (error.type) {
- case DioErrorType.connectTimeout:
- return DataSource.CONNECT_TIMEOUT.getFailure();
- case DioErrorType.sendTimeout:
- return DataSource.SEND_TIMEOUT.getFailure();
- case DioErrorType.receiveTimeout:
- return DataSource.RECEIVE_TIMEOUT.getFailure();
- case DioErrorType.response:
- switch (error.response?.statusCode) {
- case ResponseCode.BAD_REQUEST:
- return DataSource.BAD_REQUEST.getFailure();
- case ResponseCode.FORBIDDEN:
- return DataSource.FORBIDDEN.getFailure();
- case ResponseCode.UNAUTHORISED:
- return DataSource.UNAUTHORISED.getFailure();
- case ResponseCode.NOT_FOUND:
- return DataSource.NOT_FOUND.getFailure();
- case ResponseCode.INTERNAL_SERVER_ERROR:
- return DataSource.INTERNAL_SERVER_ERROR.getFailure();
- default:
- return DataSource.DEFAULT.getFailure();
- }
- case DioErrorType.cancel:
- return DataSource.CANCEL.getFailure();
- case DioErrorType.other:
- return DataSource.DEFAULT.getFailure();
- }
- }
- }
-
- extension DataSourceExtension on DataSource {
- Failure getFailure() {
- switch (this) {
- case DataSource.BAD_REQUEST:
- return Failure(ResponseCode.BAD_REQUEST, ResponseMessage.BAD_REQUEST);
- case DataSource.FORBIDDEN:
- return Failure(ResponseCode.FORBIDDEN, ResponseMessage.FORBIDDEN);
- case DataSource.UNAUTHORISED:
- return Failure(ResponseCode.UNAUTHORISED, ResponseMessage.UNAUTHORISED);
- case DataSource.NOT_FOUND:
- return Failure(ResponseCode.NOT_FOUND, ResponseMessage.NOT_FOUND);
- case DataSource.INTERNAL_SERVER_ERROR:
- return Failure(ResponseCode.INTERNAL_SERVER_ERROR,
- ResponseMessage.INTERNAL_SERVER_ERROR);
- case DataSource.CONNECT_TIMEOUT:
- return Failure(
- ResponseCode.CONNECT_TIMEOUT, ResponseMessage.CONNECT_TIMEOUT);
- case DataSource.CANCEL:
- return Failure(ResponseCode.CANCEL, ResponseMessage.CANCEL);
- case DataSource.RECEIVE_TIMEOUT:
- return Failure(
- ResponseCode.RECEIVE_TIMEOUT, ResponseMessage.RECEIVE_TIMEOUT);
- case DataSource.SEND_TIMEOUT:
- return Failure(ResponseCode.SEND_TIMEOUT, ResponseMessage.SEND_TIMEOUT);
- case DataSource.CACHE_ERROR:
- return Failure(ResponseCode.CACHE_ERROR, ResponseMessage.CACHE_ERROR);
- case DataSource.NO_INTERNET_CONNECTION:
- return Failure(ResponseCode.NO_INTERNET_CONNECTION,
- ResponseMessage.NO_INTERNET_CONNECTION);
- case DataSource.DEFAULT:
- return Failure(ResponseCode.DEFAULT, ResponseMessage.DEFAULT);
- default:
- return Failure(ResponseCode.DEFAULT, ResponseMessage.DEFAULT);
- }
- }
- }
-
- class ResponseCode {
- // API status codes
- static const int SUCCESS = 200; // success with data
- static const int NO_CONTENT = 201; // success with no content
- static const int BAD_REQUEST = 400; // failure, api rejected the request
- static const int FORBIDDEN = 403; // failure, api rejected the request
- static const int UNAUTHORISED = 401; // failure user is not authorised
- static const int NOT_FOUND =
- 404; // failure, api url is not correct and not found
- static const int INTERNAL_SERVER_ERROR =
- 500; // failure, crash happened in server side
-
- // local status code
- static const int DEFAULT = -1;
- static const int CONNECT_TIMEOUT = -2;
- static const int CANCEL = -3;
- static const int RECEIVE_TIMEOUT = -4;
- static const int SEND_TIMEOUT = -5;
- static const int CACHE_ERROR = -6;
- static const int NO_INTERNET_CONNECTION = -7;
- }
-
- class ResponseMessage {
- // API status codes
- // API response codes
- static const String SUCCESS = AppStrings.success; // success with data
- static const String NO_CONTENT =
- AppStrings.noContent; // success with no content
- static const String BAD_REQUEST =
- AppStrings.badRequestError; // failure, api rejected our request
- static const String FORBIDDEN =
- AppStrings.forbiddenError; // failure, api rejected our request
- static const String UNAUTHORISED =
- AppStrings.unauthorizedError; // failure, user is not authorised
- static const String NOT_FOUND = AppStrings
- .notFoundError; // failure, API url is not correct and not found in api side.
- static const String INTERNAL_SERVER_ERROR =
- AppStrings.internalServerError; // failure, a crash happened in API side.
-
- // local responses codes
- static const String DEFAULT =
- AppStrings.defaultError; // unknown error happened
- static const String CONNECT_TIMEOUT =
- AppStrings.timeoutError; // issue in connectivity
- static const String CANCEL =
- AppStrings.defaultError; // API request was cancelled
- static const String RECEIVE_TIMEOUT =
- AppStrings.timeoutError; // issue in connectivity
- static const String SEND_TIMEOUT =
- AppStrings.timeoutError; // issue in connectivity
- static const String CACHE_ERROR = AppStrings
- .defaultError; // issue in getting data from local data source (cache)
- static const String NO_INTERNET_CONNECTION =
- AppStrings.noInternetError; // issue in connectivity
- }
-
- class ApiInternalStatus {
- static const String SUCCESS = "ok";
- static const int FAILURE = 1;
- }
|