import 'dart:developer'; import 'dart:io'; import 'package:http/io_client.dart'; import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:signalr_core/signalr_core.dart'; abstract class ChatRepo { Future getHubConnection(); Future markMessageAsRead({required int messageId}); Future> getUsersChatMessages({required int providerId, required int customerId, required int requestOfferId, required int requestId, int pageIndex = 0, int pageSize = 0}); } class ChatRepoImp implements ChatRepo { ApiClient apiClient = injector.get(); AppState appState = injector.get(); @override Future getHubConnection() async { final userId = AppState().getUser.data!.userInfo!.userId ?? ""; final hubUrl = "https://ms.hmg.com/McHub?userID=$userId"; logger.i("Connecting with Hub ($hubUrl)"); HubConnection hub; hub = HubConnectionBuilder() .withUrl( hubUrl, HttpConnectionOptions( client: IOClient(HttpClient()..badCertificateCallback = (x, y, z) => true), logging: (level, message) {}, )) .build(); return hub; } @override Future markMessageAsRead({required int messageId}) async { var queryParameters = { "id": messageId.toString(), }; await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.messageIsReadUpdate, queryParameters, token: appState.getUser.data!.accessToken, ); } @override Future> getUsersChatMessages( {required int providerId, required int customerId, required int requestOfferId, required int requestId, int pageIndex = 0, int pageSize = 0}) async { var queryParameters = { "ReqOfferID": requestOfferId.toString(), "RequestID": requestId.toString(), "ProviderID": providerId.toString(), "CustomerID": customerId.toString(), "PageSize": pageSize.toString(), "PageIndex": pageIndex.toString(), }; GenericRespModel genericRespModel = await apiClient.getJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getChatMessages, queryParameters: queryParameters, token: appState.getUser.data!.accessToken, ); if (genericRespModel.messageStatus == 1 && genericRespModel.data != null) { List chatMessages = List.generate( genericRespModel.data.length, (index) => ChatMessageModel.fromJson(genericRespModel.data[index]), ); return chatMessages; } return []; } }