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({ required int requestTypeId, required int vehicleTypeId, required String brand, required String model, required String year, required int countryID, required int cityID, required String price, required String description, required String address, required bool isSpecialServiceNeeded, required List requestImages, }); Future> getOffersByRequest({required int requestId, int serviceProviderId = 0}); Future getOffersFromProvidersByRequest({required int requestId}); Future> getRequests({required int providerOrCustomerID}); Future> getServiceRequestsForProviders({required int serviceProviderID}); Future updateRequestStatus({required RequestStatusEnum requestStatusEnum, required int requestId}); Future updateRequestOfferStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId, required String comments}); } class RequestRepoImp implements RequestRepo { ApiClient apiClient = injector.get(); AppState appState = injector.get(); @override Future createRequest({ required int requestTypeId, required int vehicleTypeId, required String brand, required String model, required String year, required int countryID, required int cityID, required String price, required String description, required String address, required bool isSpecialServiceNeeded, required List requestImages, }) async { Map postParams = { "customerID": AppState().getUser.data!.userInfo!.customerId ?? 0, "requestType": requestTypeId, "vehicleTypeID": vehicleTypeId, "brand": brand, "model": model, "year": year, "isNew": true, "countryID": countryID, "cityID": cityID, "price": price, "description": description, "address": address, "isSpecialServiceNeeded": false, "requestImages": requestImages, }; 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 { List requestStatusList = [ RequestStatusEnum.submitted.getIdFromRequestStatusEnum().toString(), RequestStatusEnum.completed.getIdFromRequestStatusEnum().toString(), RequestStatusEnum.inProgress.getIdFromRequestStatusEnum().toString(), RequestStatusEnum.paid.getIdFromRequestStatusEnum().toString(), RequestStatusEnum.delivery.getIdFromRequestStatusEnum().toString(), RequestStatusEnum.shipping.getIdFromRequestStatusEnum().toString(), ]; final parameters = { "ServiceProviderId": serviceProviderID.toString(), "RequestTypeId": "2", // Only to get the Service Request "RequestStatuses": requestStatusList, }; 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 updateRequestStatus({required RequestStatusEnum requestStatusEnum, required int requestId}) async { var queryParameters = { "requestId": requestId.toString(), "requestStatus": requestStatusEnum.getIdFromRequestStatusEnum().toString(), }; GenericRespModel genericRespModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), appState.currentAppType == AppType.provider ? ApiConsts.updateRequestProvider : ApiConsts.updateRequestCustomer, queryParameters, token: appState.getUser.data!.accessToken, ); return genericRespModel; } @override Future updateRequestOfferStatus({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; } }