diff --git a/app/services/searchMatchService.js b/app/services/searchMatchService.js new file mode 100644 index 0000000..1075bee --- /dev/null +++ b/app/services/searchMatchService.js @@ -0,0 +1,45 @@ +"use strict"; + +const { + findSearchRequestsForRealEstate +} = require("../helpers/db/searchRequest"); +const { addMatches } = require("../helpers/db/searchRequestMatch"); + +const matchRealEstates = async realEstates => { + if (Array.isArray(realEstates)) { + const asyncMatchActions = []; + const matches = {}; + const matchingRecords = []; + for (const realEstate of realEstates) { + const searchRequestsPromise = findSearchRequestsForRealEstate(realEstate); + asyncMatchActions.push(searchRequestsPromise); + + searchRequestsPromise.then(searchRequests => { + for (const searchRequest of searchRequests) { + const { id } = searchRequest; + if (!matches[id]) { + matches[id] = { + searchRequest, + realEstates: [] + }; + } + matches[id].realEstates.push(realEstate); + matchingRecords.push({ + searchRequestId: searchRequest.id, + realEstateId: realEstate.id, + notified: false + }); + } + }); + } + + await Promise.all(asyncMatchActions); + + await addMatches(matchingRecords); + return matches; + } +}; + +module.exports = { + matchRealEstates +};