368 lines
16 KiB
JavaScript
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"
|
|
});
|
|
}
|
|
}
|