/** * @swagger * /api/endpoint/getbasicsearchdetailspaged_api: * get: * tags: [Search] * description: Basic search details * parameters: * - name: appealTypeName * description: * in: query * required: true * example: pinswg_planningappeals78s * schema: * type: string * - name: primaryIdAttribute * in: query * required: true * example: pinswg_planningappeals78id * schema: * type: string * - name: incidentID * in: query * required: true * example: 1f129091-cb0f-ec11-aac8-00224800be9c * schema: * type: string * responses: * 200: * description: Success */ import _ from "lodash"; import { azureHeadersPaged } from "../../../actions/core/headers"; import { getSelectQuery } from "../../../actions/selectQueryTypes"; import { getNavigationPropertyByPrimaryAttribute } from "../../../components/utils"; import { respondError } from "../middleware/apiResponse"; import { relayGet } from "../middleware/relayForwarding"; export default async function ApiProxy(req, res) { const appealTypeName = req.query.appealTypeName; const primaryIdAttribute = req.query.primaryIdAttribute; const incidentID = req.query.incidentID; if ( typeof appealTypeName !== "string" || appealTypeName.trim().length === 0 ) { return respondError(res, { status: 400, code: "APPEAL_TYPE_NAME_REQUIRED", message: "appealTypeName is required" }); } if ( typeof primaryIdAttribute !== "string" || primaryIdAttribute.trim().length === 0 ) { return respondError(res, { status: 400, code: "PRIMARY_ID_ATTRIBUTE_REQUIRED", message: "primaryIdAttribute is required" }); } if (typeof incidentID !== "string" || incidentID.trim().length === 0) { return respondError(res, { status: 400, code: "INCIDENT_ID_REQUIRED", message: "incidentID is required" }); } const navigationProperty = getNavigationPropertyByPrimaryAttribute( primaryIdAttribute ).NavigationProperty; // "?$filter=_" + // (primaryIdAttribute == "pinswg_sipscase" // ? "pinswg_sipscase_value" // : primaryIdAttribute + "s_value ") + // " eq " + // incidentID + let queryUrl = appealTypeName + "?$filter=" + incidentID + "&$count=true" + "&$expand=" + navigationProperty + "($select=ticketnumber)"; //" and statuscode eq 1&$count=true"; queryUrl = queryUrl + getSelectQuery(appealTypeName) + ",_" + (primaryIdAttribute == "pinswg_sipscase" ? "pinswg_sipscase_value" : primaryIdAttribute + "s_value"); return relayGet({ queryUrl, res, requestOptionsBuilder: (accessToken) => azureHeadersPaged(accessToken), transformData: (data) => { let flattened = data.value.map((r) => ({ ...r, ticketnumber: r[navigationProperty]?.ticketnumber || null })); data.value = flattened; if (_.has(data, "@odata.nextLink") === true) { const dataStr = JSON.stringify(data["@odata.nextLink"]); data["@odata.nextLink"] = dataStr.split("/v8.2/")[1]; } return data; }, errorResponse: { status: 400, code: "BASIC_SEARCH_DETAILS_PAGED_FETCH_FAILED", message: "Failed to fetch paged basic search details" } }); }