From 98263364c723ff3a5ee8f02179c490982a7ad74c Mon Sep 17 00:00:00 2001 From: Naida Vatric Date: Thu, 23 Jan 2020 11:13:53 +0100 Subject: [PATCH] Added option to include-exclude ads without price --- app/helpers/db/realEstate.js | 55 ++++++++++++++++++++++----------- app/helpers/db/searchRequest.js | 9 +++++- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/app/helpers/db/realEstate.js b/app/helpers/db/realEstate.js index c4c2d74..0d59674 100644 --- a/app/helpers/db/realEstate.js +++ b/app/helpers/db/realEstate.js @@ -98,6 +98,7 @@ const findRealEstatesForSearchRequest = async (searchRequest, maxResults) => { floorMin, floorMax, includeIncompleteAds, + includeWithoutPrice, balcony, elevator, newBuilding, @@ -139,15 +140,6 @@ const findRealEstatesForSearchRequest = async (searchRequest, maxResults) => { const query = { adType, realEstateType, - price: { - [Op.or]: { - [Op.and]: { - [Op.lte]: priceMax, - [Op.gte]: priceMin - }, - [Op.is]: null - } - }, area: { [Op.lte]: sizeMax, [Op.gte]: sizeMin @@ -159,15 +151,6 @@ const findRealEstatesForSearchRequest = async (searchRequest, maxResults) => { const queryIncludeIncomplete = { adType, realEstateType, - price: { - [Op.or]: { - [Op.and]: { - [Op.lte]: priceMax, - [Op.gte]: priceMin - }, - [Op.is]: null - } - }, area: { [Op.or]: { [Op.and]: { @@ -180,6 +163,42 @@ const findRealEstatesForSearchRequest = async (searchRequest, maxResults) => { [Op.and]: geoSearchQueryPart }; + //Is user checked includeWithoutPrice TRUE then it should return null values of price + //If not then only check for price max and min (this is DEFAULT) + //includeIncpompleteAds does not have effect on price query + if (includeWithoutPrice) { + query.price = { + [Op.or]: { + [Op.and]: { + [Op.lte]: priceMax, + [Op.gte]: priceMin + }, + [Op.is]: null + } + }; + queryIncludeIncomplete.price = { + [Op.or]: { + [Op.and]: { + [Op.lte]: priceMax, + [Op.gte]: priceMin + }, + [Op.is]: null + } + }; + } else { + query.price = { + [Op.and]: { + [Op.lte]: priceMax, + [Op.gte]: priceMin + } + }; + queryIncludeIncomplete.price = { + [Op.and]: { + [Op.lte]: priceMax, + [Op.gte]: priceMin + } + }; + } //Every other attribute is checked separately and included in query only if it is defined for real estate type if ( diff --git a/app/helpers/db/searchRequest.js b/app/helpers/db/searchRequest.js index 32eb54f..e2633b4 100644 --- a/app/helpers/db/searchRequest.js +++ b/app/helpers/db/searchRequest.js @@ -57,7 +57,8 @@ const findSearchRequestsForRealEstate = async realEstate => { //Attributes are checked separately to make different query parts - //If price is null it will be excluded from query - it will show properties with null price values + //If real estate price is number then it searches for req that have priceMin and priceMax + //If real estate price is null it searches for req that accept ads without price //User always defines price and area (sliders) - not null in search req let priceQuery = {}; if (price != null) { @@ -75,6 +76,12 @@ const findSearchRequestsForRealEstate = async realEstate => { } ] }; + } else { + priceQuery = { + includeWithoutPrice: { + [Op.eq]: true + } + }; } let areaQuery = {};