import 'dart:convert'; import 'dart:io'; import 'package:dio/dio.dart'; import 'package:graphql/client.dart'; abstract class BaseRepository { final Dio dio; final GraphQLClient graphql; BaseRepository({required this.dio, required this.graphql}); // POST PAKE GRAPHQL Future> postGraphQlMutation( String query, Map inpVariables) async { try { final options = MutationOptions(document: gql(query), variables: inpVariables); final QueryResult result = await graphql.mutate(options); if (result.hasException) { throw BaseRepositoryException(message: result.exception.toString()); } // return result.data!; return result.data!; } catch (e) { throw BaseRepositoryException(message: e.toString()); } } Future> postGraphQlQuery( String query, Map inpVariables) async { try { final options = QueryOptions(document: gql(query), variables: inpVariables); final QueryResult result = await graphql.query(options); if (result.hasException) { throw BaseRepositoryException(message: result.exception.toString()); } return result.data!; } catch (e) { throw BaseRepositoryException(message: e.toString()); } } // NATIVE POST PAKE DIO Future> post({ required Map param, required String service, String? token, }) async { try { final response = await dio.post( service, data: jsonEncode(param), options: Options( headers: token != null ? { HttpHeaders.contentTypeHeader: "application/json", HttpHeaders.authorizationHeader: "Bearer $token", } : { HttpHeaders.contentTypeHeader: "application/json", }, contentType: "application/json", ), ); if (response.statusCode != 200) { throw BaseRepositoryException( message: "Invalid Http Response ${response.statusCode}", ); } Map jsonData = jsonDecode(response.data); if (jsonData["status"] != "OK") { throw BaseRepositoryException( message: jsonData["message"], ); } else { return jsonData; } } on DioError catch (e) { throw BaseRepositoryException(message: e.message); } on SocketException catch (e) { throw BaseRepositoryException(message: e.message); } on BaseRepositoryException catch (e) { throw BaseRepositoryException(message: e.message); } } Future> get({ required String service, String? token, }) async { try { final response = await dio.get( service, options: Options( headers: token != null ? { HttpHeaders.contentTypeHeader: "application/json", HttpHeaders.authorizationHeader: "Bearer $token", } : { HttpHeaders.contentTypeHeader: "application/json", }, contentType: "application/json", ), ); if (response.statusCode != 200) { throw BaseRepositoryException( message: "Invalid Http Response ${response.statusCode}", ); } Map jsonData = jsonDecode(response.data); if (jsonData["status"] != "OK") { throw BaseRepositoryException( message: jsonData["message"], ); } else { return jsonData; } } on DioError catch (e) { throw BaseRepositoryException(message: e.message); } on SocketException catch (e) { throw BaseRepositoryException(message: e.message); } on BaseRepositoryException catch (e) { throw BaseRepositoryException(message: e.message); } } } class BaseRepositoryException implements Exception { final String? message; BaseRepositoryException({ required this.message, }); }