import '../../utils/api.dart'; import '../../utils/constant.dart'; import '../../utils/hive_utils.dart'; import '../model/data_output.dart'; import '../model/property_model.dart'; class PropertyRepository { ///This method will add property Future createProperty({required Map parameters}) async { var api = Api.apiPostProperty; if (parameters['action_type'] == "0") { api = Api.apiUpdateProperty; if (parameters.containsKey("gallery_images")) { if ((parameters['gallery_images'] as List).isEmpty) { parameters.remove("gallery_images"); } } if (parameters['title_image'] == null || parameters['title_image'] == "") { parameters.remove("title_image"); } if (parameters['meta_image'] == null || parameters['meta_image'] == "") { parameters.remove("title_image"); } } return await Api.post(url: api, parameter: parameters); } /// it will get all proerpties Future> fetchProperty({required int offset}) async { Map parameters = { Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } Future> fetchRecentProperties( {required int offset}) async { Map parameters = { Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } Future> fetchPropertyFromPropertyId( dynamic id) async { Map parameters = { Api.id: id, "current_user": HiveUtils.getUserId() }; Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } Future deleteProperty(int id) async { await Api.post( url: Api.apiUpdateProperty, parameter: {Api.id: id, Api.actionType: "1"}); } Future> fetchTopRatedProperty() async { Map parameters = { Api.topRated: "1", "current_user": HiveUtils.getUserId() }; Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } ///fetch most viewed properties Future> fetchMostViewedProperty( {required int offset, required bool sendCityName}) async { Map parameters = { Api.topRated: "1", Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; try { if (sendCityName) { // if (HiveUtils.getCityName() != null) { // if (!Constant.isDemoModeOn) { // parameters['city'] = HiveUtils.getCityName(); // } // } } Map response = await Api.get( url: Api.apiGetProprty, queryParameters: parameters, ); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } catch (e) { print("issue is $e"); throw e; } } ///fetch advertised properties Future> fetchPromotedProperty( {required int offset, required bool sendCityName}) async { /// Map parameters = { Api.promoted: true, Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; Map response = await Api.get( url: Api.apiGetProprty, queryParameters: parameters, ); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput( total: response['total'] ?? 0, modelList: modelList, ); } Future> fetchNearByProperty( {required int offset}) async { try { if (HiveUtils.getCityName() == null||HiveUtils.getCityName().toString().isEmpty) { return Future.value(DataOutput( total: 0, modelList: [], )); } Map result = await Api.get( url: Api.apiGetProprty, queryParameters: { "city": HiveUtils.getCityName(), Api.offset: offset, "limit": Constant.loadLimit, "current_user": HiveUtils.getUserId() }, ); List dataList = (result['data'] as List).map((e) { return PropertyModel.fromMap(e); }).toList(); return DataOutput( total: result['total'] ?? 0, modelList: dataList, ); } catch (e) { rethrow; } } Future> fetchMostLikeProperty({ required int offset, required bool sendCityName, }) async { Map parameters = { "most_liked": 1, "limit": Constant.loadLimit, "offset": offset, "current_user": HiveUtils.getUserId() }; if (sendCityName) { // if (HiveUtils.getCityName() != null) { // if (!Constant.isDemoModeOn) { // parameters['city'] = HiveUtils.getCityName(); // } // } } Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List).map((e) { return PropertyModel.fromMap(e); }).toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } Future> fetchMyPromotedProeprties( {required int offset}) async { Map parameters = { "users_promoted": 1, Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } ///Search proeprty Future> searchProperty(String searchQuery, {required int offset}) async { Map parameters = { Api.search: searchQuery, Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; if (Constant.propertyFilter != null) { parameters.addAll(Constant.propertyFilter!.toMap()); } Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } ///to get my properties which i had added to sell or rent Future> fetchMyProperties( {required int offset, required String type}) async { try { String? propertyType = _findPropertyType(type.toLowerCase()); Map parameters = { Api.offset: offset, Api.limit: Constant.loadLimit, Api.userid: HiveUtils.getUserId(), Api.propertyType: propertyType, "current_user": HiveUtils.getUserId() }; Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } catch (e) { throw e; } } String? _findPropertyType(String type) { if (type == "sell") { return "0"; } else if (type == "rent") { return "1"; } return null; } Future> fetchProperyFromCategoryId( {required int id, required int offset, bool? showPropertyType}) async { Map parameters = { Api.categoryId: id, Api.offset: offset, Api.limit: Constant.loadLimit, "current_user": HiveUtils.getUserId() }; if (Constant.propertyFilter != null) { parameters.addAll(Constant.propertyFilter!.toMap()); if (Constant.propertyFilter?.categoryId == "") { if (showPropertyType ?? true) { parameters.remove(Api.categoryId); } else { parameters[Api.categoryId] = id; } } } Map response = await Api.get(url: Api.apiGetProprty, queryParameters: parameters); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } Future setProeprtyView(String propertyId) async { await Api.post( url: Api.setPropertyView, parameter: {Api.propertyId: propertyId}); } Future updatePropertyStatus( {required dynamic propertyId, required dynamic status}) async { await Api.post( url: Api.updatePropertyStatus, parameter: {"status": status, "property_id": propertyId}); } Future fetchBySlug(String slug) async { Map result = await Api.get( url: Api.apiGetProprty, queryParameters: {"slug_id": slug}); return PropertyModel.fromMap(result['data'][0]); } Future> fetchPropertiesFromCityName( String cityName, { required int offset, }) async { Map response = await Api.get(url: Api.apiGetProprty, queryParameters: { "city": cityName, Api.limit: Constant.loadLimit, Api.offset: offset, "current_user": HiveUtils.getUserId() }); List modelList = (response['data'] as List) .map((e) => PropertyModel.fromMap(e)) .toList(); return DataOutput(total: response['total'] ?? 0, modelList: modelList); } }