Files
pedwfrontend/pages/api/endpoint/getbasicsearch_by_lparref_api.js
T

368 lines
16 KiB
JavaScript

import axios from "axios";
import { azureHeaders } from "../../../actions/core/headers";
import { consoleLogger } from "../../../actions/core/logger";
import { getToken } from "../../../actions/core/token";
import { hashAPIPath } from "../../../actions/core/hash";
import { respondError, respondSuccess } from "../middleware/apiResponse";
const WEBAPI_URL =
process.env.RELAY_ROOT ||
"https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/";
// ✅ 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 {
const token = await getToken();
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 axios.get(
WEBAPI_URL + queryUrl + hashAPIPath(queryUrl),
azureHeaders(token.access_token)
);
// 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"
});
}
}