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/dependencies.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/models/advertisment_models/ads_duration_model.dart'; import 'package:mc_common_app/models/advertisment_models/ads_generic_model.dart'; import 'package:mc_common_app/models/advertisment_models/special_service_model.dart'; import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart'; import 'package:mc_common_app/models/user/cities.dart'; import 'package:mc_common_app/models/user/country.dart'; import 'package:mc_common_app/models/user/role.dart'; abstract class CommonRepo { Future getAllCountries(); Future getAllCites(String countryId); Future getRoles(); Future> getVehicleTypes(); Future> getVehicleModels({required int vehicleTypeId}); Future> getVehicleModelYears({required int vehicleTypeId}); Future> getVehicleColors({required int vehicleTypeId}); Future> getVehicleConditions({required int vehicleTypeId}); Future> getVehicleCategories({required int vehicleTypeId}); Future> getVehicleMileages({required int vehicleTypeId}); Future> getVehicleTransmission({required int vehicleTypeId}); Future> getVehicleSellerTypes({required int vehicleTypeId}); Future> getVehicleCountries(); Future> getVehicleCities({required int countryId}); Future> getVehicleDamageParts(); Future getVehicleDetails({required int vehicleTypeId}); Future> getAdsDuration(); Future> getSpecialServices(); Future createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}); Future> getAllAds({required bool isMyAds}); Future> getMyAds(); } class CommonRepoImp implements CommonRepo { ApiClient apiClient = injector.get(); AppState appState = injector.get(); @override Future getAllCountries() async { return await apiClient.getJsonForObject((json) => Country.fromJson(json), ApiConsts.GetAllCountry); } @override Future getAllCites(String countryId) async { var postParams = { "CountryID": countryId, }; return await apiClient.getJsonForObject((json) => Cities.fromJson(json), ApiConsts.GetAllCities, queryParameters: postParams); } @override Future getRoles() async { return await apiClient.getJsonForObject((json) => Role.fromJson(json), ApiConsts.GetProviderRoles); } @override Future> getVehicleTypes() async { AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleTypeGet); List vehicleTypes = List.generate(adsGenericModel.data.length, (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index])); return vehicleTypes; } @override Future> getVehicleCategories({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleCategoryGet, queryParameters: postParams); List vehicleCategories = List.generate(adsGenericModel.data.length, (index) => VehicleCategoryModel.fromJson(adsGenericModel.data[index])); return vehicleCategories; } @override Future> getVehicleCities({required int countryId}) async { var postParams = { "CountryID": countryId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleCityGet, queryParameters: postParams); List vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index])); return vehicleCities; } @override Future> getVehicleColors({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleColorGet, queryParameters: postParams); List vehicleColors = List.generate(adsGenericModel.data.length, (index) => VehicleColorModel.fromJson(adsGenericModel.data[index])); return vehicleColors; } @override Future> getVehicleConditions({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleConditionGet, queryParameters: postParams); List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleConditionModel.fromJson(adsGenericModel.data[index])); return vehicleConditions; } @override Future> getVehicleCountries() async { AdsGenericModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleCountryGet, ); List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleCountryModel.fromJson(adsGenericModel.data[index])); return vehicleConditions; } @override Future> getVehicleMileages({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleMileageGet, queryParameters: postParams); List vehicleMileages = List.generate(adsGenericModel.data.length, (index) => VehicleMileageModel.fromJson(adsGenericModel.data[index])); return vehicleMileages; } @override Future> getVehicleModelYears({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleModelYearGet, queryParameters: postParams); List vehicleModelYears = List.generate(adsGenericModel.data.length, (index) => VehicleYearModel.fromJson(adsGenericModel.data[index])); return vehicleModelYears; } @override Future> getVehicleModels({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleModelGet, queryParameters: postParams); List vehicleModels = List.generate(adsGenericModel.data.length, (index) => VehicleModel.fromJson(adsGenericModel.data[index])); return vehicleModels; } @override Future> getVehicleSellerTypes({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleSellerTypeGet, queryParameters: postParams); List vehicleSellerTypes = List.generate(adsGenericModel.data.length, (index) => VehicleSellerTypeModel.fromJson(adsGenericModel.data[index])); return vehicleSellerTypes; } @override Future> getVehicleTransmission({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleTransmissionGet, queryParameters: postParams); List vehicleTransmissions = List.generate(adsGenericModel.data.length, (index) => VehicleTransmissionModel.fromJson(adsGenericModel.data[index])); return vehicleTransmissions; } @override Future getVehicleDetails({required int vehicleTypeId}) async { var postParams = { "vehicleType": vehicleTypeId.toString(), "isVehicleBrand": "true", "vehicleBrand": "0", "isVehicleCategory": "true", "isVehicleColor": "true", "isVehicleCondition": "true", "isVehicleMileage": "true", "isVehicleModel": "true", "isVehicleModelYear": "true", "isVehiclePriceRange": "true", "isVehiclePricingMethod": "true", "isVehcileSellerType": "true", "isVehicleTransmission": "true", "isCountry": "true" }; String token = appState.getUser.data!.accessToken ?? ""; AdsGenericModel adsGenericModel = await apiClient.postJsonForObject( (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleDetailsMaster, postParams, token: token, ); VehicleDetailsModel vehicleDetails = VehicleDetailsModel.fromJson(adsGenericModel.data); return vehicleDetails; } @override Future> getVehicleDamageParts() async { AdsGenericModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleDamagePartGet, ); List vehicleParts = List.generate(adsGenericModel.data.length, (index) => VehiclePartModel.fromJson(adsGenericModel.data[index])); return vehicleParts; } @override Future> getAdsDuration() async { AdsGenericModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleAdsDurationGet, ); List vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => AdsDurationModel.fromJson(adsGenericModel.data[index])); return vehicleAdsDuration; } @override Future> getSpecialServices() async { AdsGenericModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleAdsSpecialServicesGet, ); List vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => SpecialServiceModel.fromJson(adsGenericModel.data[index])); return vehicleAdsDuration; } @override Future createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}) async { List vehiclePostingImages = []; adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) { var imageMap = { "id": 0, "imageName": element.imageName, "imageUrl": element.imageUrl, "imageStr": element.imageStr, "vehiclePostingID": 0, "vehiclePosting": null, }; vehiclePostingImages.add(imageMap); }); List vehiclePostingDamageParts = []; adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) { var imageMap = { "id": 0, "comment": element.comment, "vehicleImageBase64": element.vehicleImageBase64, "vehicleDamagePartID": element.vehicleDamagePartID, "vehiclePostingID": 0, "isActive": true }; vehiclePostingDamageParts.add(imageMap); }); var postParams = { "ads": { "id": 0, "adsDurationID": adsCreationPayloadModel.ads!.adsDurationID, "startDate": adsCreationPayloadModel.ads!.startDate, "countryId": adsCreationPayloadModel.ads!.countryId, "specialServiceIDs": adsCreationPayloadModel.ads!.specialServiceIDs, "isMCHandled": false }, "vehiclePosting": { "id": 0, "userID": adsCreationPayloadModel.vehiclePosting!.userID, "vehicleType": adsCreationPayloadModel.vehiclePosting!.vehicleType, "vehicleModelID": adsCreationPayloadModel.vehiclePosting!.vehicleModelID, "vehicleModelYearID": adsCreationPayloadModel.vehiclePosting!.vehicleModelYearID, "vehicleColorID": adsCreationPayloadModel.vehiclePosting!.vehicleColorID, "vehicleCategoryID": adsCreationPayloadModel.vehiclePosting!.vehicleCategoryID, "vehicleConditionID": adsCreationPayloadModel.vehiclePosting!.vehicleConditionID, "vehicleMileageID": adsCreationPayloadModel.vehiclePosting!.vehicleMileageID, "vehicleTransmissionID": adsCreationPayloadModel.vehiclePosting!.vehicleTransmissionID, "vehicleSellerTypeID": adsCreationPayloadModel.vehiclePosting!.vehicleSellerTypeID, "cityID": adsCreationPayloadModel.vehiclePosting!.cityID, "price": adsCreationPayloadModel.vehiclePosting!.price, "vehicleVIN": adsCreationPayloadModel.vehiclePosting!.vehicleVIN, "vehicleDescription": adsCreationPayloadModel.vehiclePosting!.vehicleDescription, "vehicleTitle": adsCreationPayloadModel.vehiclePosting!.vehicleTitle, "vehicleDescriptionN": adsCreationPayloadModel.vehiclePosting!.vehicleDescription, "isFinanceAvailable": adsCreationPayloadModel.vehiclePosting!.isFinanceAvailable, "warantyYears": adsCreationPayloadModel.vehiclePosting!.warantyYears, "demandAmount": adsCreationPayloadModel.vehiclePosting!.demandAmount, // "adStatus": 1, "vehiclePostingImages": vehiclePostingImages, "vehiclePostingDamageParts": vehiclePostingDamageParts } }; String token = appState.getUser.data!.accessToken ?? ""; AdsGenericModel adsGenericModel = await apiClient.postJsonForObject( (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleAdsSingleStepCreate, postParams, token: token, ); return Future.value(adsGenericModel); } @override Future> getAllAds({required isMyAds}) async { var params = { "userID": appState.getUser.data!.userInfo!.userId ?? "", }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), ApiConsts.vehicleAdsGet, queryParameters: isMyAds ? params : null, ); List vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index])); return vehicleAdsDetails; } @override Future> getMyAds() async { var params = { "userID": appState.getUser.data!.userInfo!.userId ?? "", }; AdsGenericModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => AdsGenericModel.fromJson(json), queryParameters: params, ApiConsts.vehicleAdsGet, ); List vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index])); return vehicleAdsDetails; } }