add method to find search requests for real estate
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
"use strict";
|
||||
const db = require("../../models/index");
|
||||
const sequelize = require("sequelize");
|
||||
const Op = sequelize.Op;
|
||||
|
||||
const getSearchRequest = async searchRequestId => {
|
||||
return await db.SearchRequest.findByPk(searchRequestId);
|
||||
@@ -9,7 +11,56 @@ const createSearchRequest = async (searchRequestFields = {}) => {
|
||||
return await db.SearchRequest.create(searchRequestFields);
|
||||
};
|
||||
|
||||
const findSearchRequestsForRealEstate = async realEstate => {
|
||||
const {
|
||||
price,
|
||||
area,
|
||||
adType,
|
||||
realEstateType,
|
||||
locationLat,
|
||||
locationLong
|
||||
} = realEstate;
|
||||
|
||||
const stGeometry = sequelize.fn(
|
||||
"ST_GEOMFROMTEXT",
|
||||
`POINT (${locationLong} ${locationLat})`,
|
||||
4326
|
||||
);
|
||||
const areaToSearchColumn = sequelize.col("areaToSearch");
|
||||
const contains = sequelize.fn("ST_Contains", areaToSearchColumn, stGeometry);
|
||||
|
||||
const geoSearchQueryPart = sequelize.where(contains, true);
|
||||
|
||||
const query = {
|
||||
adType,
|
||||
realEstateType,
|
||||
subscribed: true,
|
||||
[Op.and]: geoSearchQueryPart
|
||||
};
|
||||
|
||||
if (price) {
|
||||
query.priceMin = {
|
||||
[Op.lte]: price
|
||||
};
|
||||
query.priceMax = {
|
||||
[Op.gte]: price
|
||||
};
|
||||
}
|
||||
|
||||
if (area) {
|
||||
query.sizeMin = {
|
||||
[Op.lte]: area
|
||||
};
|
||||
query.sizeMax = {
|
||||
[Op.gte]: area
|
||||
};
|
||||
}
|
||||
|
||||
return await db.SearchRequest.findAll({ where: query });
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getSearchRequest,
|
||||
createSearchRequest
|
||||
createSearchRequest,
|
||||
findSearchRequestsForRealEstate
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user