import { consoleLogger } from "../../../actions/core/logger"; import { respondError, respondSuccess } from "../middleware/apiResponse"; import { relayGetData } from "../middleware/relayForwarding"; // ✅ IMPORTANT: Only include the 23 types that actually contain pinswg_lpaapplicationreference // You can copy from your existing appealTypeArray but only keep those entities. var appealTypeArrayWithLpaRef = [ { "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", // }, // { // "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", // }, ]; export default async function ApiProxy(req, res) { try { let lpaRef = (req.query.lpaRef || "").trim(); if (!lpaRef) { return respondError(res, { status: 400, code: "LPA_REF_REQUIRED", message: "lpaRef is required" }); } // ✅ Escape single quotes for OData // OData expects '' inside string literals lpaRef = lpaRef.replace(/\'/g, "''"); // ✅ Case-insensitive search: // contains(tolower(pinswg_lpaapplicationreference), 'lowered search') const lowered = lpaRef.toLowerCase(); const resultsPerType = await Promise.all( appealTypeArrayWithLpaRef.map(async (item) => { // You can expand/select more fields if needed, but keep light for speed const selectFields = [ "modifiedon", "createdon", "statuscode", "pinswg_lpaapplicationreference", "pinswg_name", "_" + item.NavigationProperty.toLowerCase() + "_value" // for incidentid mapping (same pattern you used) ].join(","); const filter = `contains(pinswg_lpaapplicationreference,'${lowered}')`; const queryUrl = `${item.LogicalCollectionName}` + `?$select=${selectFields}` + `&$filter=${filter}` + `&$count=true` + `&$orderby=modifiedon desc`; const { data } = await relayGetData({ queryUrl }); // Normalize response rows const normalized = (data?.value || []).map((r) => ({ ...r, appealTypeLabel: item.value, entity: item.LogicalCollectionName, // match your previous convention: incidentid: r[ "_" + item.NavigationProperty.toLowerCase() + "_value" ] || null })); return normalized; }) ); // Flatten and remove null incidentid if needed let flattened = resultsPerType.flat(); // Optional: if incidentid is required flattened = flattened.filter((r) => r.incidentid !== null); const output = { "@odata.count": flattened.length, value: flattened }; return respondSuccess(res, output); } catch (error) { consoleLogger(error); return respondError(res, { status: 400, code: "BASIC_SEARCH_LPA_REF_FETCH_FAILED", message: "Failed to fetch basic search by lpa reference" }); } }