import { updateAccount } from "../../../actions/services/accountService"; import { hashAPIPath } from "../../../actions/core/hash"; import { consoleLogger } from "../../../actions/core/logger"; import { createCaseCompleteMessage, getProgressBlobs, downloadProgressFile, createBlob, getCaseBlob } from "../../../actions/azurestorage"; import _ from "lodash"; import nextConnect from "next-connect"; import middleware from "../middleware/middleware"; import { respondError, respondSuccess } from "../middleware/apiResponse"; const ApiProxy = nextConnect(); ApiProxy.use(middleware); ApiProxy.get(async (req, res) => { const containerName = req.query.container; const tempCaseRef = req.query.tempcaseref; const typeofinvolvement = req.query.inv; const checkHash = req.query.hash; if ( typeof containerName === "undefined" || containerName.length === 0 || typeof tempCaseRef === "undefined" || tempCaseRef.length === 0 || typeof checkHash === "undefined" || checkHash.length === 0 ) { return respondError(res, { status: 400, code: "MISSING_REQUIRED_QUERY", message: "container, tempcaseref and hash are required" }); } const hashCandidatePaths = [ "/api/file/createappealcompletemessage_api?container=" + containerName + "&tempcaseref=" + tempCaseRef, "/api/file/createappealcompletemessage_api?container=" + encodeURIComponent(containerName) + "&tempcaseref=" + encodeURIComponent(tempCaseRef) ]; const isHashValid = hashCandidatePaths.some( (candidatePath) => hashAPIPath(candidatePath) == "&hash=" + checkHash ); if (!isHashValid) { return respondError(res, { status: 400, code: "INVALID_HASH", message: "Invalid hash" }); } try { const progressBlob = await getProgressBlobs(containerName, tempCaseRef); const blobProgress = await downloadProgressFile( containerName, progressBlob.path, tempCaseRef ); const caseObj = await downloadProgressFile( containerName, tempCaseRef + "/" + tempCaseRef + "_case.json", tempCaseRef ); Object.assign(blobProgress, { appealComplete: tempCaseRef }); delete blobProgress.pinswg_name; await createBlob( JSON.stringify(blobProgress), containerName, tempCaseRef ); let combinedAddress = blobProgress.pinswg_siteaddressline1 + (!_.isEmpty(blobProgress.pinswg_siteaddressline2) ? ", " + blobProgress.pinswg_siteaddressline2 : "") + (!_.isEmpty(blobProgress.pinswg_siteaddresstown) ? ", " + blobProgress.pinswg_siteaddresstown : ""); combinedAddress = combinedAddress + ", " + blobProgress.pinswg_siteaddresscounty + ", " + blobProgress.pinswg_siteaddresspostcode; Object.assign(caseObj, { pinswg_lpareference: blobProgress.pinswg_lpaapplicationreference, description: blobProgress.pinswg_developmentdescription, pinswg_caseaddress: combinedAddress }); await getCaseBlob(containerName, tempCaseRef, caseObj); let contactId = caseObj["customerid_contact@odata.bind"]; contactId = contactId.match(/\(([^)]+)\)/); if (typeofinvolvement != 846040000) { void (async () => { try { await updateAccount( contactId[1], { pinswg_typeofinvolvement: 846040001 }, true ); } catch (error) { consoleLogger(error); } })(); } await createCaseCompleteMessage(containerName, tempCaseRef); return respondSuccess(res, { status: "success" }); } catch (error) { consoleLogger(error); return respondError(res, { status: 400, code: "CREATE_APPEAL_COMPLETE_MESSAGE_FAILED", message: "Failed to create appeal complete message" }); } }); export const config = { api: { bodyParser: false } }; export default ApiProxy;