From 0d23e47bea380a7ef0a2d32a2b8912aa4cdcd016 Mon Sep 17 00:00:00 2001 From: robbond Date: Wed, 18 Mar 2026 10:41:02 +0000 Subject: [PATCH] address parts now do and and not fail if more than one is added --- .../endpoint/getbasicsearch_by_address_api.js | 1348 +++++++++-------- 1 file changed, 700 insertions(+), 648 deletions(-) diff --git a/pages/api/endpoint/getbasicsearch_by_address_api.js b/pages/api/endpoint/getbasicsearch_by_address_api.js index 45dacf35..c5bf4477 100644 --- a/pages/api/endpoint/getbasicsearch_by_address_api.js +++ b/pages/api/endpoint/getbasicsearch_by_address_api.js @@ -1,22 +1,4 @@ -/** - * @swagger - * /api/endpoint/getbasicsearch_api: - * get: - * tags: [Search] - * description: Basic search - * parameters: - * - name: searchString - * in: query - * required: true - * schema: - * type: string - * responses: - * 200: - * description: Success - */ - import axios from "axios"; -import CryptoJS from "crypto-js"; import { JSONPath as jsonpath } from "jsonpath-plus"; import { azureHeaders } from "../../../actions/core/headers"; import { consoleLogger } from "../../../actions/core/logger"; @@ -27,664 +9,734 @@ const WEBAPI_URL = process.env.RELAY_ROOT || "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; -const getIncident = async (incidentID) => { - const queryUrl = - process.env.API_ROOT + - "/api/endpoint/getincidentbyid_api?searchString=" + - incidentID; +const escapeODataString = (value = "") => + String(value).replace(/'/g, "''").trim(); - var config = { - method: "get", - url: queryUrl - }; +const normaliseSearchValue = (value = "") => escapeODataString(value); - return axios(config) - .then((res) => { - return res.data; - }) - .catch((error) => { - consoleLogger(error); - }); +const buildContainsClause = (fieldName, value) => { + const safeValue = normaliseSearchValue(value); + if (!safeValue) return null; + + return `contains(${fieldName}, '${safeValue}')`; }; -export default async function ApiProxy(req, res) { - var appellantname = req.query.appellantname || ""; - var addressline1 = req.query.addressline1 || ""; - var town = req.query.town || ""; - var county = req.query.county || ""; - var postcode = req.query.postcode || ""; - var token = await getToken(); +const joinFilterClauses = (clauses = []) => + clauses.filter(Boolean).join(" and "); - console.log("whats my parmas:", req.query); +const getAddressFields = (logicalCollectionName) => { + if ( + logicalCollectionName === "pinswg_sipses" || + logicalCollectionName === "pinswg_dnses" + ) { + return { + line1: "pinswg_projectlocation", + town: "pinswg_projectlocation", + county: "pinswg_projectlocation", + postcode: "pinswg_projectlocation" + }; + } - addressline1 = addressline1.replace(/\'/g, "''"); - typeof town != "undefined" && (town = town.replace(/\'/g, "''")); + if ( + logicalCollectionName === "pinswg_ldps" || + logicalCollectionName === "pinswg_harbourrevisionorders" + ) { + return { + line1: "pinswg_addressline1", + town: "pinswg_town", + county: "pinswg_county", + postcode: "pinswg_postcode" + }; + } - var searchResultsObj = []; + if ( + logicalCollectionName === "pinswg_transportandworkacts" || + logicalCollectionName === "pinswg_electricityacts" + ) { + return { + line1: "pinswg_addressline1", + town: "pinswg_addresstown", + county: "pinswg_addresscounty", + postcode: "pinswg_postcode" + }; + } - var appealTypeArray = [ - { - "LogicalCollectionName": "pinswg_advertses", - "LogicalName": "pinswg_adverts", - "PrimaryIdAttribute": "pinswg_advertsid", - "UrlName": "adverts", - "MetadataId": "0735866b-5482-eb11-aac0-00224800be9c", - "appealTypeID": "846040018", - "NavigationProperty": "pinswg_AdvertsIds", - "value": "Adverts" - }, - { - "LogicalCollectionName": "pinswg_callinss77s", - "LogicalName": "pinswg_callinss77", - "PrimaryIdAttribute": "pinswg_callinss77id", - "UrlName": "callinss77", - "MetadataId": "dd309e51-4982-eb11-aac0-00224800be9c", - "appealTypeID": "846040010", - "NavigationProperty": "pinswg_CallInsS77Ids", - "value": "Called In Applications - S77" - }, - { - "LogicalCollectionName": "pinswg_commonlands", - "LogicalName": "pinswg_commonland", - "PrimaryIdAttribute": "pinswg_commonlandid", - "UrlName": "commonland", - "MetadataId": "4161a618-5082-eb11-aac0-00224800be9c", - "appealTypeID": "846040016", - "NavigationProperty": "pinswg_CommonLandIds", - "value": "Common Land" - }, - { - "LogicalCollectionName": - "pinswg_communityinfrastructurelevys117118119s", - "LogicalName": "pinswg_communityinfrastructurelevys117118119", - "PrimaryIdAttribute": "pinswg_communityinfrastructurelevyid", - "UrlName": "communityinfrastructurelevys117118119", - "MetadataId": "0c309f3c-4882-eb11-aac0-00224800be9c", - "appealTypeID": "846040009", - "NavigationProperty": "pinswg_CommunityInfrastructureLevyIds", - "value": "Community Infrastructure Levy - S117, 118, & 119" - }, - { - "LogicalCollectionName": "pinswg_compulsorypurchaseorderses", - "LogicalName": "pinswg_compulsorypurchaseorders", - "PrimaryIdAttribute": "pinswg_compulsorypurchaseordersid", - "UrlName": "compulsorypurchaseorders", - "MetadataId": "054da4c7-5582-eb11-aac0-00224800be9c", - "appealTypeID": "846040019", - "NavigationProperty": "pinswg_CompulsoryPurchaseOrdersIds", - "value": "Compulsory Purchase Orders" - }, - { - "LogicalCollectionName": "pinswg_dnses", - "LogicalName": "pinswg_dns", - "PrimaryIdAttribute": "pinswg_dnsid", - "UrlName": "dns", - "MetadataId": "36f07225-4a82-eb11-aac0-00224800be9c", - "appealTypeID": "846040011", - "NavigationProperty": "pinswg_DNSIds", - "value": "Developments of National Significance" - }, - { - "LogicalCollectionName": "pinswg_electricityacts", - "LogicalName": "pinswg_electricityact", - "PrimaryIdAttribute": "pinswg_electricityactid", - "UrlName": "electricityact", - "MetadataId": "6aedaab1-4a82-eb11-aac0-00224800be9c", - "appealTypeID": "846040012", - "NavigationProperty": "pinswg_ElectricityActIds", - "value": "Electricity Act" - }, - { - "LogicalCollectionName": - "pinswg_enforcementlistedbuildingconservationaps", - "LogicalName": - "pinswg_enforcementlistedbuildingandconservationappeals39", - "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconseid", - "UrlName": "enforcementlistedbuildingconservationap", - "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c", - "appealTypeID": "846040006", - "NavigationProperty": "pinswg_EnforcementListedBuildingConseIds", - "value": "Enforcement Listed Building and Conservation Appeal - S39" - }, - { - "LogicalCollectionName": "pinswg_enforcementnoticeappeals174s", - "LogicalName": "pinswg_enforcementnoticeappeals174", - "PrimaryIdAttribute": "pinswg_enforcementnoticeappeals174id", - "UrlName": "enforcementnoticeappeals174", - "MetadataId": "930a3cc4-9181-eb11-aac0-00224800be9c", - "appealTypeID": "846040005", - "NavigationProperty": "pinswg_EnforcementNoticeAppealS174Ids", - "value": "Enforcement Notice Appeal - S174" - }, - { - "LogicalCollectionName": "pinswg_environmentalpermittings", - "LogicalName": "pinswg_environmentalpermitting", - "PrimaryIdAttribute": "pinswg_enforcementpermittingid", - "UrlName": "environmentalpermitting", - "MetadataId": "62d4aa9a-5682-eb11-aac0-00224800be9c", - "appealTypeID": "846040020", - "NavigationProperty": "pinswg_EnforcementPermittingIds", - "value": "Environmental Permitting" - }, - // { - // "LogicalCollectionName": "pinswg_harbourrevisionorders", - // "LogicalName": "pinswg_harbourrevisionorder", - // "PrimaryIdAttribute": "pinswg_harbourrevisionorderid", - // "UrlName": "harbourrevisionorder", - // "MetadataId": "dc8dcd0d-4f82-eb11-aac0-00224800be9c", - // "appealTypeID": "846040014", - // "NavigationProperty": "pinswg_HarbourRevisionOrderIds", - // "value": "Harbour Revision Order", - // }, - { - "LogicalCollectionName": - "pinswg_hedgeshedgerowstreepreservationreplacems", - "LogicalName": "pinswg_hedgeshedgerowstreepreservationreplacem", - "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservatioid", - "UrlName": "hedgeshedgerowstreepreservationreplacem", - "MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c", - "appealTypeID": "846040017", - "NavigationProperty": "pinswg_HedgesHedgerowsTreePreservatioIds", - "value": - "High Hedges, Tree Preservation orders, Hedgerows, Tree Replacement Notice." - }, - { - "LogicalCollectionName": "pinswg_householderappealhases", - "LogicalName": "pinswg_householderappealhas", - "PrimaryIdAttribute": "pinswg_householderappealhasid", - "UrlName": "householderappealhas", - "MetadataId": "a6c728b0-9081-eb11-aac0-00224800be9c", - "appealTypeID": "846040004", - "NavigationProperty": "pinswg_HouseholderAppealHASIds", - "value": "Householder and Minor Commercial Appeals - HAS/CAS" - }, - { - "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates", - "LogicalName": "pinswg_lawfuldevelopmentcertificateappeals194195", - "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificatappid", - "UrlName": "lawfuldevelopmentcertificateappeals1941", - "MetadataId": "184e4861-9681-eb11-aac0-00224800be9c", - "appealTypeID": "846040008", - "NavigationProperty": "pinswg_LawfulDevelopmentCertificatAppIds", - "value": "Lawful Development Certificate Appeal - S194 + 195" - }, - // { - // "LogicalCollectionName": "pinswg_ldps", - // "LogicalName": "pinswg_ldp", - // "PrimaryIdAttribute": "pinswg_ldpid", - // "UrlName": "ldp", - // "MetadataId": "af424d4d-5882-eb11-aac0-00224800be9c", - // "appealTypeID": "846040023", - // "NavigationProperty": "pinswg_LDPIds", - // }, - // { - // "LogicalCollectionName": - // "pinswg_enforcementlistedbuildingconservationaps", - // "LogicalName": "pinswg_enforcementlistedbuildingandconservationap", - // "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconseid", - // "UrlName": "enforcementlistedbuildingconservationap", - // "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c", - // "appealTypeID": "846040006", - // "NavigationProperty": "pinswg_EnforcementListedBuildingConseIds", - // }, - { - "LogicalCollectionName": "pinswg_maintenanceoflands217s", - "LogicalName": "pinswg_maintenanceoflands217", - "PrimaryIdAttribute": "pinswg_maintenanceoflands217id", - "UrlName": "maintenanceoflands217", - "MetadataId": "bb302784-9581-eb11-aac0-00224800be9c", - "appealTypeID": "846040007", - "NavigationProperty": "pinswg_MaintenanceofLandS217Ids", - "value": "Maintenance of Land - S217" - }, - { - "LogicalCollectionName": "pinswg_miscellaneouscaseworks", - "LogicalName": "pinswg_misccasework", - "PrimaryIdAttribute": "pinswg_miscellaneouscasewordid", - "UrlName": "miscellaneouscasework", - "MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c", - "appealTypeID": "846040022", - "NavigationProperty": "pinswg_MiscellaneousCasewordIds" - }, - { - "LogicalCollectionName": "pinswg_nonvalidations", - "LogicalName": "pinswg_nonvalidation", - "PrimaryIdAttribute": "pinswg_nonvalidationid", - "UrlName": "nonvalidation", - "MetadataId": "37f31a93-5882-eb11-aac0-00224800be9c", - "appealTypeID": "846040024", - "NavigationProperty": "pinswg_NonValidationIds", - "value": "Non-Validation" - }, - { - "LogicalCollectionName": "pinswg_planningappeals78s", - "LogicalName": "pinswg_planningappeals78", - "PrimaryIdAttribute": "pinswg_planningappeals78id", - "UrlName": "planningappeals78", - "MetadataId": "8d7f813a-4183-eb11-aac0-00224800be9c", - "appealTypeID": "846040000", - "NavigationProperty": "pinswg_PlanningAppealS78Ids", - "value": "Planning Appeal - S78" - }, - { - "LogicalCollectionName": "pinswg_planningconditionss73s79s", - "LogicalName": "pinswg_planningconditionss73s79", - "PrimaryIdAttribute": "pinswg_planningconditionss73s79id", - "UrlName": "planningconditionss73s79", - "MetadataId": "093bf9ff-8d81-eb11-aac0-00224800be9c", - "appealTypeID": "846040001", - "NavigationProperty": "pinswg_PlanningConditionsS73S79Ids", - "value": "Planning Conditions - S73 + S79" - }, - { - "LogicalCollectionName": "pinswg_planningobligationappeals106s", - "LogicalName": "pinswg_planningobligationappeals106", - "PrimaryIdAttribute": "pinswg_planningobligationappeals106id", - "UrlName": "planningobligationappeals106", - "MetadataId": "cb8beeae-8f81-eb11-aac0-00224800be9c", - "appealTypeID": "846040003", - "NavigationProperty": "pinswg_PlanningObligationAppealS106Ids", - "value": "Planning Obligation Appeal - S106" - }, - { - "LogicalCollectionName": "pinswg_sipses", - "LogicalName": "pinswg_sips", - "PrimaryIdAttribute": "pinswg_sipscase", - "UrlName": "sips", - "MetadataId": "8d31911b-b8ea-ef11-ab08-00224800be9c", - "appealTypeID": "846040002", - "tmpNav": "pinswg_sipsid", - "NavigationProperty": "pinswg_sipscase", - "value": "SIP" - }, + if (logicalCollectionName === "pinswg_rows") { + return { + line1: "pinswg_siteaddressline1", + town: "pinswg_siteaddresstown", + county: "pinswg_sitecounty", + postcode: "pinswg_siteaddresspostcode" + }; + } - { - "LogicalCollectionName": "pinswg_rows", - "LogicalName": "pinswg_row", - "PrimaryIdAttribute": "pinswg_rowid", - "UrlName": "row", - "MetadataId": "4ccc6e93-4f82-eb11-aac0-00224800be9c", - "appealTypeID": "846040015", - "NavigationProperty": "pinswg_ROWIds", - "value": "Rights of Way" - }, - { - "LogicalCollectionName": "pinswg_transportandworkacts", - "LogicalName": "pinswg_transportandworksact", - "PrimaryIdAttribute": "pinswg_transportandworkactid", - "UrlName": "transportandworksact", - "MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c", - "appealTypeID": "846040013", - "NavigationProperty": "pinswg_TransportandWorkActIds", - "value": "Transport and Works Act" - }, - { - "LogicalCollectionName": "pinswg_wayleaves", - "LogicalName": "pinswg_wayleave", - "PrimaryIdAttribute": "pinswg_wayleaveid", - "UrlName": "wayleave", - "MetadataId": "a0652117-5782-eb11-aac0-00224800be9c", - "appealTypeID": "846040021", - "NavigationProperty": "pinswg_WayleaveIds", - "value": "Wayleave" - } + return { + line1: "pinswg_siteaddressline1", + town: "pinswg_siteaddresstown", + county: "pinswg_siteaddresscounty", + postcode: "pinswg_siteaddresspostcode" + }; +}; + +const buildAddressFilter = ({ + logicalCollectionName, + addressline1, + town, + county, + postcode +}) => { + const fields = getAddressFields(logicalCollectionName); + + return joinFilterClauses([ + buildContainsClause(fields.line1, addressline1), + buildContainsClause(fields.town, town), + buildContainsClause(fields.county, county), + buildContainsClause(fields.postcode, postcode) + ]); +}; + +const getLocationSelectFields = (logicalCollectionName) => { + if ( + logicalCollectionName === "pinswg_sipses" || + logicalCollectionName === "pinswg_dnses" + ) { + return ["pinswg_projectlocation"]; + } + + if ( + logicalCollectionName === "pinswg_ldps" || + logicalCollectionName === "pinswg_harbourrevisionorders" + ) { + return [ + "pinswg_addresstown", + "pinswg_addressline1", + "pinswg_addresscounty", + "pinswg_addressline2", + "pinswg_addresspostcode" + ]; + } + + if ( + logicalCollectionName === "pinswg_electricityacts" || + logicalCollectionName === "pinswg_transportandworkacts" + ) { + return [ + "pinswg_addresstown", + "pinswg_addressline1", + "pinswg_addresscounty", + "pinswg_addressline2", + "pinswg_postcode" + ]; + } + + if (logicalCollectionName === "pinswg_rows") { + return [ + "pinswg_siteaddresstown", + "pinswg_siteaddressline1", + "pinswg_sitecounty", + "pinswg_siteaddressline2", + "pinswg_siteaddresspostcode" + ]; + } + + return [ + "pinswg_siteaddresstown", + "pinswg_siteaddressline1", + "pinswg_siteaddresscounty", + "pinswg_siteaddressline2", + "pinswg_siteaddresspostcode" ]; +}; - const getSearchResultsObj = await Promise.all( - appealTypeArray.map(async (item) => { - let container = {}; +const collectionsWithStartDate = new Set([ + "pinswg_planningappeals78s", + "pinswg_lawfuldevelopmentcertificates", + "pinswg_householderappealhases", + "pinswg_advertses", + "pinswg_callinss77s", + "pinswg_commonlands", + "pinswg_communityinfrastructurelevys117118119s", + "pinswg_compulsorypurchaseorderses", + "pinswg_enforcementnoticeappeals174s", + "pinswg_environmentalpermittings", + "pinswg_hedgeshedgerowstreepreservationreplacems", + "pinswg_miscellaneouscaseworks", + "pinswg_planningconditionss73s79s", + "pinswg_planningobligationappeals106s", + "pinswg_rows", + "pinswg_wayleaves" +]); - var queryUrl = - item.LogicalCollectionName == "pinswg_sipses" - ? item.LogicalCollectionName + - "?$count=true&$filter=" + - (addressline1 != "" - ? "(contains(pinswg_projectlocation,'" + - addressline1 + - "')) " - : "") + - (town != "" - ? "(contains(pinswg_projectlocation,'" + town + "')) " - : "") + - (county != "" - ? "(contains(pinswg_projectlocation,'" + - county + - "')) " - : "") + - (postcode != "" - ? "(contains(pinswg_projectlocation,'" + - postcode + - "')) " - : "") + - "&$orderby=createdon desc&$select=modifiedon,_pinswg_appellant_value,pinswg_name,_pinswg_sipscase_value,pinswg_projectlocation,_pinswg_associatedlpa_value,statuscode,pinswg_validnoticeofintentiontosubmit,pinswg_decision" - : item.LogicalCollectionName + - "?$count=true&$filter=" + - (addressline1 != "" - ? "(contains(" + - (item.LogicalCollectionName == "pinswg_ldps" || - item.LogicalCollectionName == - "pinswg_harbourrevisionorders" || - item.LogicalCollectionName == - "pinswg_electricityacts" || - item.LogicalCollectionName == - "pinswg_transportandworkacts" || - item.LogicalCollectionName == "pinswg_dnses" || - item.LogicalCollectionName == "pinswg_sipses" - ? "pinswg_addressline1" - : "pinswg_siteaddressline1") + - ", '" + - addressline1 + - "')) " - : "") + - (town != "" - ? (addressline1 != "" ? " and " : "") + - " (contains(" + - (item.LogicalCollectionName == "pinswg_ldps" || - item.LogicalCollectionName == - "pinswg_harbourrevisionorders" - ? "pinswg_town" - : item.LogicalCollectionName == - "pinswg_transportandworkacts" || - item.LogicalCollectionName == - "pinswg_electricityacts" || - item.LogicalCollectionName == - "pinswg_dnses" || - item.LogicalCollectionName == - "pinswg_sipses" - ? "pinswg_addresstown" - : "pinswg_siteaddresstown") + - ", '" + - town + - "')) " - : "") + - (county != "" - ? (addressline1 != "" || town != "" || postcode != "" - ? " and " - : "") + - " (contains(" + - (item.LogicalCollectionName == "pinswg_ldps" || - item.LogicalCollectionName == - "pinswg_harbourrevisionorders" - ? "pinswg_county" - : item.LogicalCollectionName == - "pinswg_transportandworkacts" || - item.LogicalCollectionName == - "pinswg_electricityacts" || - item.LogicalCollectionName == - "pinswg_dnses" || - item.LogicalCollectionName == - "pinswg_sipses" - ? "pinswg_addresscounty" - : item.LogicalCollectionName == "pinswg_rows" - ? "pinswg_sitecounty" - : "pinswg_siteaddresscounty") + - ", '" + - county + - "')) " - : "") + - (postcode != "" - ? (addressline1 != "" || town != "" || county != "" - ? " and " - : "") + - " (contains(" + - (item.LogicalCollectionName == "pinswg_ldps" || - item.LogicalCollectionName == - "pinswg_harbourrevisionorders" - ? "pinswg_postcode" - : item.LogicalCollectionName == - "pinswg_transportandworkacts" || - item.LogicalCollectionName == - "pinswg_electricityacts" || - item.LogicalCollectionName == "pinswg_dnses" - ? "pinswg_postcode" - : "pinswg_siteaddresspostcode") + - ", '" + - postcode + - "')) " - : "") + - "&$orderby=createdon desc&$select=modifiedon,_pinswg_appellant_value,pinswg_name," + - (item.LogicalCollectionName == - "pinswg_planningappeals78s" || - item.LogicalCollectionName == - "pinswg_lawfuldevelopmentcertificates" || - item.LogicalCollectionName == - "pinswg_householderappealhases" || - item.LogicalCollectionName == "pinswg_advertses" || - item.LogicalCollectionName == "pinswg_callinss77s" || - item.LogicalCollectionName == "pinswg_commonlands" || - item.LogicalCollectionName == - "pinswg_communityinfrastructurelevys117118119s" || - item.LogicalCollectionName == - "pinswg_compulsorypurchaseorderses" || - item.LogicalCollectionName == - "pinswg_enforcementnoticeappeals174s" || - item.LogicalCollectionName == - "pinswg_environmentalpermittings" || - item.LogicalCollectionName == - "pinswg_hedgeshedgerowstreepreservationreplacems" || - item.LogicalCollectionName == - "pinswg_lawfuldevelopmentcertificates" || - item.LogicalCollectionName == - "pinswg_miscellaneouscaseworks" || - item.LogicalCollectionName == - "pinswg_planningconditionss73s79s" || - item.LogicalCollectionName == - "pinswg_planningobligationappeals106s" || - item.LogicalCollectionName == "pinswg_rows" || - item.LogicalCollectionName == "pinswg_wayleaves" - ? "pinswg_startdate,pinswg_finalcommentsduedate," - : "") + - (item.LogicalCollectionName == - "pinswg_enforcementlistedbuildingconservationaps" || - item.LogicalCollectionName == - "pinswg_maintenanceoflands217s" - ? "pinswg_startdates,pinswg_finalcommentsduedate," - : "") + - (item.LogicalCollectionName == "pinswg_nonvalidations" - ? "pinswg_validdate," - : "") + - (item.LogicalCollectionName == "pinswg_electricityacts" || - item.LogicalCollectionName == "pinswg_dnses" || - item.LogicalCollectionName == - "pinswg_transportandworkacts" - ? "pinswg_applicationacceptedasvalid,pinswg_endofrepresentationperiod," - : "") + - (item.LogicalCollectionName == "pinswg_ldps" || - item.LogicalCollectionName == - "pinswg_harbourrevisionorders" - ? "pinswg_addresstown,pinswg_addressline1,pinswg_addresscounty,pinswg_addressline2,pinswg_addresspostcode" - : item.LogicalCollectionName == - "pinswg_electricityacts" || - item.LogicalCollectionName == "pinswg_dnses" || - item.LogicalCollectionName == "pinswg_sipses" || - item.LogicalCollectionName == - "pinswg_transportandworkacts" - ? "pinswg_addresstown,pinswg_addressline1,pinswg_addresscounty,pinswg_addressline2,pinswg_postcode" - : item.LogicalCollectionName == "pinswg_rows" - ? "pinswg_siteaddresstown,pinswg_siteaddressline1,pinswg_sitecounty,pinswg_siteaddressline2,pinswg_siteaddresspostcode" - : "pinswg_siteaddresstown,pinswg_siteaddressline1,pinswg_siteaddresscounty,pinswg_siteaddressline2,pinswg_siteaddresspostcode") + - "," + - (item.LogicalCollectionName == "pinswg_dnses" || - item.LogicalCollectionName == - "pinswg_transportandworkacts" - ? "pinswg_dateofdecision," - : item.LogicalCollectionName == - "pinswg_nonvalidations" - ? "pinswg_decisionissueddate," - : item.LogicalCollectionName == - "pinswg_electricityacts" - ? "pinswg_datedecision," - : item.LogicalCollectionName == "pinswg_sipses" - ? "" - : "pinswg_casedecisiondate,") + - (item.LogicalCollectionName == "pinswg_planningappeals78s" - ? "pinswg_dicision" - : item.LogicalCollectionName == - "pinswg_transportandworkacts" - ? "pinswg_decsision" - : item.LogicalCollectionName == - "pinswg_nonvalidations" - ? "pinswg_decisionissued" - : "pinswg_decision") + - "," + - (item.LogicalCollectionName == "pinswg_nonvalidations" || - item.LogicalCollectionName == "pinswg_sipses" - ? "" - : "pinswg_dateeventrequested,") + - "statuscode" + - (item.LogicalCollectionName == "pinswg_sipses" - ? "" - : ",_" + - item.NavigationProperty.toLowerCase() + - "_value") + - (item.LogicalCollectionName == "pinswg_planningappeals78s" - ? ",_pinswg_localplanningauthority_value" - : "") + - (item.LogicalCollectionName == - "pinswg_compulsorypurchaseorderses" || - item.LogicalCollectionName == - "pinswg_enforcementnoticeappeals174s" || - item.LogicalCollectionName == - "pinswg_planningconditionss73s79s" || - item.LogicalCollectionName == - "pinswg_planningobligationappeals106s" || - item.LogicalCollectionName == - "pinswg_hedgeshedgerowstreepreservationreplacems" || - item.LogicalCollectionName == - "pinswg_householderappealhases" || - item.LogicalCollectionName == - "pinswg_lawfuldevelopmentcertificates" || - item.LogicalCollectionName == "pinswg_adverts" || - item.LogicalCollectionName == - "pinswg_communityinfrastructurelevys117118119s" || - item.LogicalCollectionName == "pinswg_callinss77s" || - item.LogicalCollectionName == "pinswg_wayleaves" || - item.LogicalCollectionName == - "pinswg_environmentalpermittings" || - item.LogicalCollectionName == - "pinswg_miscellaneouscaseworks" || - item.LogicalCollectionName == "pinswg_commonlands" || - item.LogicalCollectionName == "pinswg_rows" || - item.LogicalCollectionName == - "pinswg_maintenanceoflands217s" || - item.LogicalCollectionName == - "pinswg_enforcementlistedbuildingconservationaps" || - item.LogicalCollectionName == "pinswg_dnses" || - item.LogicalCollectionName == "pinswg_sipses" - ? ",_pinswg_associatedlpa_value" - : "") + - (item.LogicalCollectionName == "pinswg_sipses" - ? ",_pinswg_sipscase_value" - : ",_" + item.PrimaryIdAttribute + "s_value"); +const collectionsWithStartDatesPlural = new Set([ + "pinswg_enforcementlistedbuildingconservationaps", + "pinswg_maintenanceoflands217s" +]); - console.log( - "\n==========================================\n", - "basic search: " + queryUrl, - "\n\n", - item.LogicalCollectionName, - "\n\n", - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - "\n==========================================\n" - ); +const collectionsWithValidDate = new Set(["pinswg_nonvalidations"]); - const resultObj = axios - .get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeaders(token.access_token) - ) - .then(({ data }) => { - data.value.map(async (key) => { - Object.assign(key, { - "pinswg_appealType": item.value, - "incidentid": - key[ - item.value == "SIP" - ? "_pinswg_sipscase_value" - : "_" + - item.NavigationProperty.toLowerCase() + - "_value" - ] - }); - }); - return searchResultsObj.push(data); - }) - .catch((error) => { - consoleLogger(error); - res.status(400).json(error); - }); +const collectionsWithAcceptedAsValid = new Set([ + "pinswg_electricityacts", + "pinswg_dnses", + "pinswg_transportandworkacts" +]); - return resultObj; - }) - ); +const collectionsWithAssociatedLpa = new Set([ + "pinswg_compulsorypurchaseorderses", + "pinswg_enforcementnoticeappeals174s", + "pinswg_planningconditionss73s79s", + "pinswg_planningobligationappeals106s", + "pinswg_hedgeshedgerowstreepreservationreplacems", + "pinswg_householderappealhases", + "pinswg_lawfuldevelopmentcertificates", + "pinswg_advertses", + "pinswg_communityinfrastructurelevys117118119s", + "pinswg_callinss77s", + "pinswg_wayleaves", + "pinswg_environmentalpermittings", + "pinswg_miscellaneouscaseworks", + "pinswg_commonlands", + "pinswg_rows", + "pinswg_maintenanceoflands217s", + "pinswg_enforcementlistedbuildingconservationaps", + "pinswg_dnses", + "pinswg_sipses" +]); - searchResultsObj = jsonpath({ - path: "$..[?(@ && @.pinswg_name)]", - json: searchResultsObj, - eval: true - }); +const getDecisionDateField = (logicalCollectionName) => { + if ( + logicalCollectionName === "pinswg_dnses" || + logicalCollectionName === "pinswg_transportandworkacts" + ) { + return "pinswg_dateofdecision"; + } - searchResultsObj = searchResultsObj.filter((arr) => arr.incidentid != null); + if (logicalCollectionName === "pinswg_nonvalidations") { + return "pinswg_decisionissueddate"; + } - const getIncidentResultsObj = await Promise.all( - searchResultsObj.map(async (key) => { - console.log(key); - var queryUrl = - "incidents?$select=pinswg_environmentalstatementlocation,ticketnumber,pinswg_publishtoweb,modifiedon,description,numberofchildincidents,_accountid_value,_customerid_value,_pinswg_associatedlpa_value,_ownerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value,pinswg_lpareference,pinswg_appellantagent,pinswg_appellantfirstname,pinswg_appellantlastname&$expand=primarycontactid($select=fullname)&$filter=incidentid eq " + - key.incidentid + - " and pinswg_appealcasetype ne null &$orderby=createdon desc&$count=true"; + if (logicalCollectionName === "pinswg_electricityacts") { + return "pinswg_datedecision"; + } - //console.log(key.incidentid == null && key); + if (logicalCollectionName === "pinswg_sipses") { + return null; + } - const incidentObj = await axios - .get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeaders(token.access_token) - ) - .then(({ data }) => { - return data.value[0]; - }); + return "pinswg_casedecisiondate"; +}; - console.log( - "pinswg_publishtoweb: " + incidentObj.pinswg_publishtoweb, - "ticketnumber: " + incidentObj.ticketnumber - ); - Object.assign(key, { - "pinswg_publishtoweb": incidentObj.pinswg_publishtoweb, - "ticketnumber": incidentObj.ticketnumber, - "pinswg_lpareference": incidentObj.pinswg_lpareference - }); +const getDecisionField = (logicalCollectionName) => { + if (logicalCollectionName === "pinswg_planningappeals78s") { + return "pinswg_dicision"; + } - return incidentObj; - }) - ); + if (logicalCollectionName === "pinswg_transportandworkacts") { + return "pinswg_decsision"; + } - if (req.query.hasOwnProperty("appellantname")) { - searchResultsObj = searchResultsObj.filter( - (arr) => - arr[ - "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" - ] != undefined - ); + if (logicalCollectionName === "pinswg_nonvalidations") { + return "pinswg_decisionissued"; + } - searchResultsObj = searchResultsObj.filter( - (arr) => - arr[ - "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" - ] - .toLowerCase() - .indexOf(appellantname) > -1 + return "pinswg_decision"; +}; + +const getSelectFields = (item) => { + const fields = ["modifiedon", "_pinswg_appellant_value", "pinswg_name"]; + + if (collectionsWithStartDate.has(item.LogicalCollectionName)) { + fields.push("pinswg_startdate", "pinswg_finalcommentsduedate"); + } + + if (collectionsWithStartDatesPlural.has(item.LogicalCollectionName)) { + fields.push("pinswg_startdates", "pinswg_finalcommentsduedate"); + } + + if (collectionsWithValidDate.has(item.LogicalCollectionName)) { + fields.push("pinswg_validdate"); + } + + if (collectionsWithAcceptedAsValid.has(item.LogicalCollectionName)) { + fields.push( + "pinswg_applicationacceptedasvalid", + "pinswg_endofrepresentationperiod" ); } - searchResultsObj = searchResultsObj.filter( - (arr) => arr.pinswg_publishtoweb - ); + fields.push(...getLocationSelectFields(item.LogicalCollectionName)); - let searchResultsOutputObj = {}; - Object.assign(searchResultsOutputObj, { - "@odata.count": searchResultsObj.length, - "value": searchResultsObj + const decisionDateField = getDecisionDateField(item.LogicalCollectionName); + if (decisionDateField) { + fields.push(decisionDateField); + } + + fields.push(getDecisionField(item.LogicalCollectionName)); + + if ( + item.LogicalCollectionName !== "pinswg_nonvalidations" && + item.LogicalCollectionName !== "pinswg_sipses" + ) { + fields.push("pinswg_dateeventrequested"); + } + + fields.push("statuscode"); + + if (item.LogicalCollectionName !== "pinswg_sipses") { + fields.push(`_${item.NavigationProperty.toLowerCase()}_value`); + } + + if (item.LogicalCollectionName === "pinswg_planningappeals78s") { + fields.push("_pinswg_localplanningauthority_value"); + } + + if (collectionsWithAssociatedLpa.has(item.LogicalCollectionName)) { + fields.push("_pinswg_associatedlpa_value"); + } + + if (item.LogicalCollectionName === "pinswg_sipses") { + fields.push("_pinswg_sipscase_value"); + } else { + fields.push(`_${item.PrimaryIdAttribute}s_value`); + } + + return [...new Set(fields)].join(","); +}; + +const getIncidentIdFromRecord = (item, record) => { + if (item.value === "SIP") { + return record._pinswg_sipscase_value || null; + } + + return record[`_${item.NavigationProperty.toLowerCase()}_value`] || null; +}; + +const buildSearchQueryUrl = (item, params) => { + const addressFilter = buildAddressFilter({ + logicalCollectionName: item.LogicalCollectionName, + addressline1: params.addressline1, + town: params.town, + county: params.county, + postcode: params.postcode }); - return res.status(200).json(searchResultsOutputObj); + const selectFields = getSelectFields(item); + + return ( + `${item.LogicalCollectionName}?$count=true` + + (addressFilter ? `&$filter=${addressFilter}` : "") + + `&$orderby=createdon desc&$select=${selectFields}` + ); +}; + +const buildIncidentQueryUrl = (incidentId) => + "incidents?" + + "$select=" + + [ + "pinswg_environmentalstatementlocation", + "ticketnumber", + "pinswg_publishtoweb", + "modifiedon", + "description", + "numberofchildincidents", + "_accountid_value", + "_customerid_value", + "_pinswg_associatedlpa_value", + "_ownerid_value", + "pinswg_appealcasetype", + "statuscode", + "ticketnumber", + "title", + "_primarycontactid_value", + "pinswg_lpareference", + "pinswg_appellantagent", + "pinswg_appellantfirstname", + "pinswg_appellantlastname" + ].join(",") + + "&$expand=primarycontactid($select=fullname)" + + `&$filter=incidentid eq ${incidentId} and pinswg_appealcasetype ne null ` + + "&$orderby=createdon desc&$count=true"; + +const fetchSearchResultsForAppealType = async (item, token, params) => { + const queryUrl = buildSearchQueryUrl(item, params); + + console.log( + "\n==========================================\n", + "basic search: " + queryUrl, + "\n\n", + item.LogicalCollectionName, + "\n\n", + WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), + "\n==========================================\n" + ); + + try { + const { data } = await axios.get( + WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), + azureHeaders(token.access_token) + ); + + return (data.value || []).map((record) => ({ + ...record, + pinswg_appealType: item.value, + incidentid: getIncidentIdFromRecord(item, record) + })); + } catch (error) { + consoleLogger(error); + return []; + } +}; + +const fetchIncident = async (incidentId, token) => { + const queryUrl = buildIncidentQueryUrl(incidentId); + + try { + const { data } = await axios.get( + WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), + azureHeaders(token.access_token) + ); + + return data?.value?.[0] || null; + } catch (error) { + consoleLogger(error); + return null; + } +}; + +export default async function ApiProxy(req, res) { + try { + const appellantname = req.query.appellantname || ""; + const addressline1 = req.query.addressline1 || ""; + const town = req.query.town || ""; + const county = req.query.county || ""; + const postcode = req.query.postcode || ""; + + const token = await getToken(); + + console.log("whats my params:", req.query); + + const appealTypeArray = [ + { + LogicalCollectionName: "pinswg_advertses", + LogicalName: "pinswg_adverts", + PrimaryIdAttribute: "pinswg_advertsid", + UrlName: "adverts", + MetadataId: "0735866b-5482-eb11-aac0-00224800be9c", + appealTypeID: "846040018", + NavigationProperty: "pinswg_AdvertsIds", + value: "Adverts" + }, + { + LogicalCollectionName: "pinswg_callinss77s", + LogicalName: "pinswg_callinss77", + PrimaryIdAttribute: "pinswg_callinss77id", + UrlName: "callinss77", + MetadataId: "dd309e51-4982-eb11-aac0-00224800be9c", + appealTypeID: "846040010", + NavigationProperty: "pinswg_CallInsS77Ids", + value: "Called In Applications - S77" + }, + { + LogicalCollectionName: "pinswg_commonlands", + LogicalName: "pinswg_commonland", + PrimaryIdAttribute: "pinswg_commonlandid", + UrlName: "commonland", + MetadataId: "4161a618-5082-eb11-aac0-00224800be9c", + appealTypeID: "846040016", + NavigationProperty: "pinswg_CommonLandIds", + value: "Common Land" + }, + { + LogicalCollectionName: + "pinswg_communityinfrastructurelevys117118119s", + LogicalName: "pinswg_communityinfrastructurelevys117118119", + PrimaryIdAttribute: "pinswg_communityinfrastructurelevyid", + UrlName: "communityinfrastructurelevys117118119", + MetadataId: "0c309f3c-4882-eb11-aac0-00224800be9c", + appealTypeID: "846040009", + NavigationProperty: "pinswg_CommunityInfrastructureLevyIds", + value: "Community Infrastructure Levy - S117, 118, & 119" + }, + { + LogicalCollectionName: "pinswg_compulsorypurchaseorderses", + LogicalName: "pinswg_compulsorypurchaseorders", + PrimaryIdAttribute: "pinswg_compulsorypurchaseordersid", + UrlName: "compulsorypurchaseorders", + MetadataId: "054da4c7-5582-eb11-aac0-00224800be9c", + appealTypeID: "846040019", + NavigationProperty: "pinswg_CompulsoryPurchaseOrdersIds", + value: "Compulsory Purchase Orders" + }, + { + LogicalCollectionName: "pinswg_dnses", + LogicalName: "pinswg_dns", + PrimaryIdAttribute: "pinswg_dnsid", + UrlName: "dns", + MetadataId: "36f07225-4a82-eb11-aac0-00224800be9c", + appealTypeID: "846040011", + NavigationProperty: "pinswg_DNSIds", + value: "Developments of National Significance" + }, + { + LogicalCollectionName: "pinswg_electricityacts", + LogicalName: "pinswg_electricityact", + PrimaryIdAttribute: "pinswg_electricityactid", + UrlName: "electricityact", + MetadataId: "6aedaab1-4a82-eb11-aac0-00224800be9c", + appealTypeID: "846040012", + NavigationProperty: "pinswg_ElectricityActIds", + value: "Electricity Act" + }, + { + LogicalCollectionName: + "pinswg_enforcementlistedbuildingconservationaps", + LogicalName: + "pinswg_enforcementlistedbuildingandconservationappeals39", + PrimaryIdAttribute: "pinswg_enforcementlistedbuildingconseid", + UrlName: "enforcementlistedbuildingconservationap", + MetadataId: "c697be96-9481-eb11-aac0-00224800be9c", + appealTypeID: "846040006", + NavigationProperty: "pinswg_EnforcementListedBuildingConseIds", + value: "Enforcement Listed Building and Conservation Appeal - S39" + }, + { + LogicalCollectionName: "pinswg_enforcementnoticeappeals174s", + LogicalName: "pinswg_enforcementnoticeappeals174", + PrimaryIdAttribute: "pinswg_enforcementnoticeappeals174id", + UrlName: "enforcementnoticeappeals174", + MetadataId: "930a3cc4-9181-eb11-aac0-00224800be9c", + appealTypeID: "846040005", + NavigationProperty: "pinswg_EnforcementNoticeAppealS174Ids", + value: "Enforcement Notice Appeal - S174" + }, + { + LogicalCollectionName: "pinswg_environmentalpermittings", + LogicalName: "pinswg_environmentalpermitting", + PrimaryIdAttribute: "pinswg_enforcementpermittingid", + UrlName: "environmentalpermitting", + MetadataId: "62d4aa9a-5682-eb11-aac0-00224800be9c", + appealTypeID: "846040020", + NavigationProperty: "pinswg_EnforcementPermittingIds", + value: "Environmental Permitting" + }, + { + LogicalCollectionName: + "pinswg_hedgeshedgerowstreepreservationreplacems", + LogicalName: "pinswg_hedgeshedgerowstreepreservationreplacem", + PrimaryIdAttribute: "pinswg_hedgeshedgerowstreepreservatioid", + UrlName: "hedgeshedgerowstreepreservationreplacem", + MetadataId: "60f38fed-5382-eb11-aac0-00224800be9c", + appealTypeID: "846040017", + NavigationProperty: "pinswg_HedgesHedgerowsTreePreservatioIds", + value: "High Hedges, Tree Preservation orders, Hedgerows, Tree Replacement Notice." + }, + { + LogicalCollectionName: "pinswg_householderappealhases", + LogicalName: "pinswg_householderappealhas", + PrimaryIdAttribute: "pinswg_householderappealhasid", + UrlName: "householderappealhas", + MetadataId: "a6c728b0-9081-eb11-aac0-00224800be9c", + appealTypeID: "846040004", + NavigationProperty: "pinswg_HouseholderAppealHASIds", + value: "Householder and Minor Commercial Appeals - HAS/CAS" + }, + { + LogicalCollectionName: "pinswg_lawfuldevelopmentcertificates", + LogicalName: "pinswg_lawfuldevelopmentcertificateappeals194195", + PrimaryIdAttribute: "pinswg_lawfuldevelopmentcertificatappid", + UrlName: "lawfuldevelopmentcertificateappeals1941", + MetadataId: "184e4861-9681-eb11-aac0-00224800be9c", + appealTypeID: "846040008", + NavigationProperty: "pinswg_LawfulDevelopmentCertificatAppIds", + value: "Lawful Development Certificate Appeal - S194 + 195" + }, + { + LogicalCollectionName: "pinswg_maintenanceoflands217s", + LogicalName: "pinswg_maintenanceoflands217", + PrimaryIdAttribute: "pinswg_maintenanceoflands217id", + UrlName: "maintenanceoflands217", + MetadataId: "bb302784-9581-eb11-aac0-00224800be9c", + appealTypeID: "846040007", + NavigationProperty: "pinswg_MaintenanceofLandS217Ids", + value: "Maintenance of Land - S217" + }, + { + LogicalCollectionName: "pinswg_miscellaneouscaseworks", + LogicalName: "pinswg_misccasework", + PrimaryIdAttribute: "pinswg_miscellaneouscasewordid", + UrlName: "miscellaneouscasework", + MetadataId: "f519aa8e-5782-eb11-aac0-00224800be9c", + appealTypeID: "846040022", + NavigationProperty: "pinswg_MiscellaneousCasewordIds", + value: "Miscellaneous Casework" + }, + { + LogicalCollectionName: "pinswg_nonvalidations", + LogicalName: "pinswg_nonvalidation", + PrimaryIdAttribute: "pinswg_nonvalidationid", + UrlName: "nonvalidation", + MetadataId: "37f31a93-5882-eb11-aac0-00224800be9c", + appealTypeID: "846040024", + NavigationProperty: "pinswg_NonValidationIds", + value: "Non-Validation" + }, + { + LogicalCollectionName: "pinswg_planningappeals78s", + LogicalName: "pinswg_planningappeals78", + PrimaryIdAttribute: "pinswg_planningappeals78id", + UrlName: "planningappeals78", + MetadataId: "8d7f813a-4183-eb11-aac0-00224800be9c", + appealTypeID: "846040000", + NavigationProperty: "pinswg_PlanningAppealS78Ids", + value: "Planning Appeal - S78" + }, + { + LogicalCollectionName: "pinswg_planningconditionss73s79s", + LogicalName: "pinswg_planningconditionss73s79", + PrimaryIdAttribute: "pinswg_planningconditionss73s79id", + UrlName: "planningconditionss73s79", + MetadataId: "093bf9ff-8d81-eb11-aac0-00224800be9c", + appealTypeID: "846040001", + NavigationProperty: "pinswg_PlanningConditionsS73S79Ids", + value: "Planning Conditions - S73 + S79" + }, + { + LogicalCollectionName: "pinswg_planningobligationappeals106s", + LogicalName: "pinswg_planningobligationappeals106", + PrimaryIdAttribute: "pinswg_planningobligationappeals106id", + UrlName: "planningobligationappeals106", + MetadataId: "cb8beeae-8f81-eb11-aac0-00224800be9c", + appealTypeID: "846040003", + NavigationProperty: "pinswg_PlanningObligationAppealS106Ids", + value: "Planning Obligation Appeal - S106" + }, + { + LogicalCollectionName: "pinswg_sipses", + LogicalName: "pinswg_sips", + PrimaryIdAttribute: "pinswg_sipscase", + UrlName: "sips", + MetadataId: "8d31911b-b8ea-ef11-ab08-00224800be9c", + appealTypeID: "846040002", + tmpNav: "pinswg_sipsid", + NavigationProperty: "pinswg_sipscase", + value: "SIP" + }, + { + LogicalCollectionName: "pinswg_rows", + LogicalName: "pinswg_row", + PrimaryIdAttribute: "pinswg_rowid", + UrlName: "row", + MetadataId: "4ccc6e93-4f82-eb11-aac0-00224800be9c", + appealTypeID: "846040015", + NavigationProperty: "pinswg_ROWIds", + value: "Rights of Way" + }, + { + LogicalCollectionName: "pinswg_transportandworkacts", + LogicalName: "pinswg_transportandworksact", + PrimaryIdAttribute: "pinswg_transportandworkactid", + UrlName: "transportandworksact", + MetadataId: "bc3edc4b-7d82-eb11-aac0-00224800be9c", + appealTypeID: "846040013", + NavigationProperty: "pinswg_TransportandWorkActIds", + value: "Transport and Works Act" + }, + { + LogicalCollectionName: "pinswg_wayleaves", + LogicalName: "pinswg_wayleave", + PrimaryIdAttribute: "pinswg_wayleaveid", + UrlName: "wayleave", + MetadataId: "a0652117-5782-eb11-aac0-00224800be9c", + appealTypeID: "846040021", + NavigationProperty: "pinswg_WayleaveIds", + value: "Wayleave" + } + ]; + + const searchResultsNested = await Promise.all( + appealTypeArray.map((item) => + fetchSearchResultsForAppealType(item, token, { + addressline1, + town, + county, + postcode + }) + ) + ); + + let searchResultsObj = searchResultsNested.flat(); + + searchResultsObj = jsonpath({ + path: "$..[?(@ && @.pinswg_name)]", + json: searchResultsObj, + eval: true + }); + + searchResultsObj = searchResultsObj.filter( + (record) => record.incidentid != null + ); + + const incidentResults = await Promise.all( + searchResultsObj.map(async (record) => { + const incidentObj = await fetchIncident( + record.incidentid, + token + ); + + if (!incidentObj) { + return { + ...record, + pinswg_publishtoweb: false, + ticketnumber: null, + pinswg_lpareference: null + }; + } + + console.log( + "pinswg_publishtoweb: " + incidentObj.pinswg_publishtoweb, + "ticketnumber: " + incidentObj.ticketnumber + ); + + return { + ...record, + pinswg_publishtoweb: incidentObj.pinswg_publishtoweb, + ticketnumber: incidentObj.ticketnumber, + pinswg_lpareference: incidentObj.pinswg_lpareference + }; + }) + ); + + searchResultsObj = incidentResults; + + if (Object.prototype.hasOwnProperty.call(req.query, "appellantname")) { + searchResultsObj = searchResultsObj.filter( + (record) => + record[ + "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" + ] !== undefined + ); + + searchResultsObj = searchResultsObj.filter((record) => + record[ + "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" + ] + .toLowerCase() + .includes(String(appellantname).toLowerCase()) + ); + } + + searchResultsObj = searchResultsObj.filter( + (record) => record.pinswg_publishtoweb + ); + + return res.status(200).json({ + "@odata.count": searchResultsObj.length, + value: searchResultsObj + }); + } catch (error) { + consoleLogger(error); + return res.status(500).json({ + message: "Failed to retrieve search results.", + error: error?.message || error + }); + } }