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/extensions/string_extensions.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/requests_models/offers_model.dart'; import 'package:mc_common_app/models/requests_models/provider_offers_model.dart'; import 'package:mc_common_app/models/requests_models/request_model.dart'; import 'package:mc_common_app/utils/enums.dart'; abstract class RequestRepo { Future createRequest(Map map); Future> getOffersByRequest({required int requestId, int serviceProviderId = 0}); Future getOffersFromProvidersByRequest({required int requestId}); Future> getRequests({required int providerOrCustomerID}); Future> getServiceRequestsForProviders({required int serviceProviderID}); Future updateOfferRequestStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId, required String comments}); } class RequestRepoImp implements RequestRepo { ApiClient apiClient = injector.get(); AppState appState = injector.get(); @override Future createRequest(Map postParams) async { GenericRespModel enumGenericModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.createRequest, postParams, token: appState.getUser.data!.accessToken, ); return enumGenericModel; } @override Future> getRequests({required int providerOrCustomerID}) async { final paramsForGetRequests = { "pageSize": 100, "pageIndex": 0, }; if (AppState().currentAppType == AppType.provider) { paramsForGetRequests.addEntries([MapEntry("providerID", providerOrCustomerID)]); } else { paramsForGetRequests.addEntries([MapEntry("customerID", providerOrCustomerID)]); } GenericRespModel enumGenericModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getRequest, paramsForGetRequests, token: appState.getUser.data!.accessToken, ); List requests = List.generate( enumGenericModel.data.length, (index) => RequestModel.fromJson( enumGenericModel.data[index], ), ); return requests; } @override Future> getServiceRequestsForProviders({required int serviceProviderID}) async { final parameters = { "ServiceProviderId": serviceProviderID.toString(), "RequestTypeId": "2", // Only to get the Service Request }; GenericRespModel genericRespModel = await apiClient.getJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getServiceRequestsForProvider, queryParameters: parameters, token: appState.getUser.data!.accessToken, ); List requests = List.generate( genericRespModel.data.length, (index) => RequestModel.fromJson( genericRespModel.data[index], ), ); return requests; } @override Future> getOffersByRequest({required int requestId, int serviceProviderId = 0}) async { var queryParameters = { "RequestID": requestId.toString(), "ServiceProviderID": serviceProviderId.toString(), }; GenericRespModel genericRespModel = await apiClient.getJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getRequestOffers, queryParameters: queryParameters, token: appState.getUser.data!.accessToken, ); List offersList = List.generate( genericRespModel.data.length, (index) => OffersModel.fromJson(genericRespModel.data[index]), ); return offersList; } @override Future getOffersFromProvidersByRequest({required int requestId}) async { final customerId = appState.getUser.data!.userInfo!.customerId; var queryParameters = { "customerID": customerId.toString(), "requestID": requestId.toString(), }; GenericRespModel genericRespModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.requestOffersSpsGet, queryParameters, token: appState.getUser.data!.accessToken, ); ProviderOffersModel providerOffersModel = ProviderOffersModel(); if (genericRespModel.data != null && genericRespModel.data.length > 0) { providerOffersModel = ProviderOffersModel.fromJson(genericRespModel.data.first); } return providerOffersModel; } @override Future updateOfferRequestStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId, required String comments}) async { var queryParameters = { "requestOfferId": requestOfferId.toString(), "offerStatus": requestOfferStatusEnum.getIdFromRequestOfferStatusEnum().toString(), "comments": comments, }; GenericRespModel genericRespModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.updateRequestOffer, queryParameters, token: appState.getUser.data!.accessToken, ); return genericRespModel; } }