// /** // * @swagger // * /api/endpoint/getadvancedsearchpaged_api: // * get: // * tags: [Search] // * description: Advanced search paged // * parameters: // * - name: searchstring // * description: search string // * in: query // * required: false // * example: { // * "q":"cas-", // * "lpa":"744c69f4-48da-eb11-aac5-00224800be9c", // * "apt":"846040000", // * "statuscode":"1"} // * schema: // * type: string // * - name: pageNumber // * in: query // * required: true // * example: 1 // * schema: // * type: string // * - name: orderby // * in: query // * required: true // * example: createdon // * schema: // * type: string // * - name: fieldSort // * in: query // * required: true // * description: asc or desc // * example: asc // * schema: // * type: string // * - name: showNumberOfRecords // * in: query // * required: true // * description: number of records to return per page // * example: 10 // * schema: // * type: string // * responses: // * 200: // * description: Success // */ import axios from "axios"; import CryptoJS from "crypto-js"; import _ from "lodash"; import { azureHeadersPagedCustom, azureHeadersPaged, azureHeaders, consoleLogger, getToken, } from "../../../actions"; const WORDKEY = process.env.HASHKEY; const WEBAPI_URL = process.env.RELAY_ROOT || "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; const hashAPIPath = (queryPath) => { var hashlink = CryptoJS.HmacSHA256( queryPath, CryptoJS.enc.Hex.parse(WORDKEY) ); hashlink = hashlink.toString(CryptoJS.enc.Hex); //return "&hash=" + hashlink; return (queryPath.indexOf("?") > -1 ? "&hash=" : "?hash=") + hashlink; }; export default async function ApiProxy(req, res) { var searchString = req.query.searchstring; var pageNumber = req.query.pageNumber; var token = await getToken(); var orderby = req.query.orderby; var fieldSort = req.query.fieldSort; var showNumberOfRecords = req.query.showNumberOfRecords; searchString = _.isEmpty(searchString) ? searchString : JSON.parse(decodeURI(searchString)); var queryString = ""; queryString += _.has(searchString, "q") && searchString.q != null ? "(contains(title, '" + searchString.q.replace(/\'/g, "''") + "') or contains(ticketnumber,'" + searchString.q.replace(/\'/g, "''") + "')) and" : ""; queryString += (_.has(searchString, "lpa") || _.has(searchString, "LPA")) && searchString.lpa != null ? " _pinswg_associatedlpa_value eq " + searchString.lpa + " and" : ""; queryString += _.has(searchString, "apt") && searchString.apt != null ? " pinswg_appealcasetype eq " + searchString.apt + " and" : ""; queryString += _.has(searchString, "statuscode") && searchString.statuscode != null ? " statuscode eq " + searchString.statuscode + " and" : ""; var queryUrl = "incidents?$select=pinswg_environmentalstatementlocation,pinswg_caseaddress,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=" + queryString + " pinswg_appealcasetype ne null and pinswg_publishtoweb eq true&$orderby=" + orderby + " " + fieldSort + "&$count=true" + (typeof pageNumber != "undefined" ? "&$skiptoken=" + ('') : ""); if (_.has(searchString, "projecttype")) { queryUrl = "pinswg_sipses?$count=true&$expand=pinswg_sipscase&$filter=_pinswg_projecttype_value eq " + searchString.projecttype + (searchString.hasOwnProperty("q") ? " and contains(pinswg_projectname, '" + searchString.q + "')" : "") + (searchString.hasOwnProperty("lpa") ? " and _pinswg_associatedlpa_value eq " + searchString.lpa + " " : "") + "&$orderby=" + orderby + " " + fieldSort + (typeof pageNumber != "undefined" ? "&$skiptoken=" + ('') : ""); } console.log("adv qu: ", queryUrl); var apiResponse = _.isEmpty(searchString) ? res.status(400).json() : axios .get( WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), azureHeadersPagedCustom( token.access_token, showNumberOfRecords ) ) .then(async ({ data }) => { var dataStr; _.has(data, "@odata.nextLink") == true && ((dataStr = JSON.stringify(data["@odata.nextLink"])), (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1])); if (_.has(searchString, "projecttype")) { // await updateValueArray(data, token); // async function updateValueArray(data, token) { // for (let i = 0; i < data.value.length; i++) { // const item = data.value[i]; // try { // // Axios call using the `incidentid` to fetch additional data // const response = await axios.get( // WEBAPI_URL + // "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + // item.incidentid + // " and _pinswg_projecttype_value eq " + // searchString.projecttype + // "&$select=_pinswg_projecttype_value" + // hashAPIPath( // "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + // item.incidentid + // " and _pinswg_projecttype_value eq " + // searchString.projecttype + // "&$select=_pinswg_projecttype_value" // ), // azureHeadersPaged(token.access_token) // ); // // Assuming the response contains the additional data you want to add // // console.log(response.data.value[0]); // console.log(response.data.value); // if ( // response.data.value.length > 0 && // response.data.value[0] // ._pinswg_projecttype_value != null // ) { // Object.assign( // item, // response.data.value[0] // ); // Update item with new data // } else { // console.log( // `No project type found for incident ID ${item.incidentid}` // ); // } // } catch (error) { // console.error( // `Error fetching data for incident ID ${item.incidentid}:`, // error // ); // } // } // } // data.value = data.value.filter( // (item) => item._pinswg_projecttype_value != null // ); // data["@odata.count"] = data.value.length; } res.status(200).json(data); }) .catch((error) => { consoleLogger(error); res.status(400).json(error); }); return apiResponse; } // export default async function ApiProxy(req, res) { // var searchString = req.query.searchstring; // var pageNumber = req.query.pageNumber; // var token = await getToken(); // var orderby = req.query.orderby; // var fieldSort = req.query.fieldSort; // var showNumberOfRecords = req.query.showNumberOfRecords; // searchString = _.isEmpty(searchString) // ? searchString // : JSON.parse(decodeURI(searchString)); // var queryString = ""; // queryString += // _.has(searchString, "q") && searchString.q != null // ? "(contains(title, '" + // searchString.q.replace(/\'/g, "''") + // "') or contains(ticketnumber,'" + // searchString.q.replace(/\'/g, "''") + // "')) and" // : ""; // queryString += // (_.has(searchString, "lpa") || _.has(searchString, "LPA")) && // searchString.lpa != null // ? " _pinswg_associatedlpa_value eq " + searchString.lpa + " and" // : ""; // queryString += // _.has(searchString, "apt") && searchString.apt != null // ? " pinswg_appealcasetype eq " + searchString.apt + " and" // : ""; // queryString += // _.has(searchString, "statuscode") && searchString.statuscode != null // ? " statuscode eq " + searchString.statuscode + " and" // : ""; // var queryUrl = // "incidents?$select=pinswg_environmentalstatementlocation,pinswg_caseaddress,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=" + // queryString + // " pinswg_appealcasetype ne null and pinswg_publishtoweb eq true&$orderby=" + // orderby + // " " + // fieldSort + // "&$count=true"; // console.log(WEBAPI_URL + queryUrl + hashAPIPath(queryUrl)); // var apiResponse = _.isEmpty(searchString) // ? res.status(400).json() // : axios // .get( // WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), // azureHeadersPagedCustom( // token.access_token, // showNumberOfRecords // ) // ) // .then(async ({ data }) => { // var dataStr; // _.has(data, "@odata.nextLink") == true && // ((dataStr = JSON.stringify(data["@odata.nextLink"])), // (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1])); // if (_.has(searchString, "projecttype")) { // await updateValueArray(data, token); // async function updateValueArray(data, token) { // let hasNextPage = true; // let nextPageUrl = data["@odata.nextLink"]; // // Loop through all pages // while (hasNextPage) { // // Iterate through current data and process it // for (let i = 0; i < data.value.length; i++) { // const item = data.value[i]; // try { // // Axios call using the `incidentid` to fetch additional data // const response = await axios.get( // WEBAPI_URL + // "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + // item.incidentid + // " and _pinswg_projecttype_value eq " + // searchString.projecttype + // "&$select=_pinswg_projecttype_value" + // hashAPIPath( // "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + // item.incidentid + // " and _pinswg_projecttype_value eq " + // searchString.projecttype + // "&$select=_pinswg_projecttype_value" // ), // azureHeadersPaged(token.access_token) // ); // if ( // response.data.value.length > 0 && // response.data.value[0] // ._pinswg_projecttype_value != null // ) { // Object.assign( // item, // response.data.value[0] // ); // Update item with new data // } else { // console.log( // `No project type found for incident ID ${item.incidentid}` // ); // } // } catch (error) { // console.error( // `Error fetching data for incident ID ${item.incidentid}:`, // error // ); // } // } // // If there's a next page, fetch it // if (nextPageUrl) { // const nextPageData = await axios.get( // WEBAPI_URL + // nextPageUrl + // hashAPIPath(nextPageUrl), // azureHeadersPaged(token.access_token) // ); // data.value = [ // ...data.value, // ...nextPageData.data.value, // ]; // nextPageUrl = // nextPageData.data["@odata.nextLink"]; // } else { // hasNextPage = false; // } // } // } // data.value = data.value.filter( // (item) => item._pinswg_projecttype_value != null // ); // data["@odata.count"] = data.value.length; // } // res.status(200).json(data); // }) // .catch((error) => { // consoleLogger(error); // res.status(400).json(error); // }); // return apiResponse; // }