TASK22224: modernize generatepdf handlers

This commit is contained in:
2026-03-23 18:39:44 +00:00
parent 411190e403
commit cc4fb36439
4 changed files with 250 additions and 133 deletions
+97 -92
View File
@@ -112,16 +112,16 @@ import { respondError, respondSuccess } from "../middleware/apiResponse";
// ApiProxy.post(async (req, res) => {
export default async function handler(req, res) {
var checkHash = req.query.hash;
var appealType = req.query.appealType;
var isDownload = req.query?.download === "true";
const checkHash = req.query.hash;
const appealType = req.query.appealType;
const isDownload = req.query?.download === "true";
let appealBodyObj =
typeof req.body === "string" ? JSON.parse(req.body) : req.body;
var containerID = appealBodyObj.containerID;
var casefolderID = appealBodyObj.casefolderID;
var caseRef = appealBodyObj.caseRef;
var checkquerypath = "/api/file/generateappealpdf";
const containerID = appealBodyObj.containerID;
const casefolderID = appealBodyObj.casefolderID;
const caseRef = appealBodyObj.caseRef;
let checkquerypath = "/api/file/generateappealpdf";
if (
typeof checkHash === "undefined" ||
@@ -184,92 +184,97 @@ export default async function handler(req, res) {
}
};
const tempCaseBlob = await getTempCaseBlob(containerID, casefolderID);
const blobProgress = await getProgressBlobs(containerID, casefolderID).then(
(data) => {
//console.log("Progress blob path:", data);
return downloadProgressFile(containerID, data.path, casefolderID);
}
);
try {
const tempCaseBlob = await getTempCaseBlob(containerID, casefolderID);
const progressBlob = await getProgressBlobs(containerID, casefolderID);
const blobProgress = await downloadProgressFile(
containerID,
progressBlob.path,
casefolderID
);
const uniqueArray = appealBodyObj.filesList.filter((obj, index, self) => {
// Check if the name has already been encountered
return index === self.findIndex((t) => t.name === obj.name);
});
Object.assign(blobProgress, {
"filesList": uniqueArray,
"caseObj": tempCaseBlob
});
const pickListData = await getPickLists(appealType);
// ReactPDF.render(
// <MyDocument docProps={blobProgress} pickListData={pickListData} />,
// process.cwd() + `/tmp/${blobProgress.pinswg_name}.pdf`
// );
// ReactPDF.renderToStream();
const streamToBuffer = async (readableStream) => {
return new Promise((resolve, reject) => {
const chunks = [];
readableStream.on("data", (chunk) => {
chunks.push(
Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)
);
});
readableStream.on("end", () => resolve(Buffer.concat(chunks)));
readableStream.on("error", reject);
});
};
const renderedPDF = await ReactPDF.renderToStream(
<MyDocument docProps={blobProgress} pickListData={pickListData} />
);
const repDate = new Date();
let day = repDate.getDate();
let month = repDate.getMonth() + 1;
let year = repDate.getFullYear();
const pdfFileName =
year +
"-" +
("0" + month).slice(-2) +
"-" +
("0" + day).slice(-2) +
"_-_Appeal_Form";
const renderedPDFBuffer = await streamToBuffer(renderedPDF);
await createAppealPDFBlob(
renderedPDFBuffer,
containerID,
blobProgress.pinswg_name || blobProgress.caseObj.ticketnumber
)
.then((data) => {
if (isDownload) {
const filename = `${pdfFileName}.pdf`;
res.setHeader("Content-Type", "application/pdf");
res.setHeader(
"Content-Disposition",
`attachment; filename="${filename}"`
);
return res.status(200).send(renderedPDFBuffer);
const uniqueArray = appealBodyObj.filesList.filter(
(obj, index, self) => {
return index === self.findIndex((t) => t.name === obj.name);
}
return respondSuccess(res, {
status: "success",
data: data,
path: `/files/${pdfFileName}.pdf`
});
})
.catch(() => {
return respondError(res, {
status: 400,
code: "GENERATE_APPEAL_PDF_FAILED",
message: "Failed to generate appeal PDF"
});
);
Object.assign(blobProgress, {
"filesList": uniqueArray,
"caseObj": tempCaseBlob
});
const pickListData = await getPickLists(appealType);
// ReactPDF.render(
// <MyDocument docProps={blobProgress} pickListData={pickListData} />,
// process.cwd() + `/tmp/${blobProgress.pinswg_name}.pdf`
// );
// ReactPDF.renderToStream();
const streamToBuffer = async (readableStream) => {
return new Promise((resolve, reject) => {
const chunks = [];
readableStream.on("data", (chunk) => {
chunks.push(
Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)
);
});
readableStream.on("end", () => resolve(Buffer.concat(chunks)));
readableStream.on("error", reject);
});
};
const renderedPDF = await ReactPDF.renderToStream(
React.createElement(MyDocument, {
docProps: blobProgress,
pickListData: pickListData
})
);
const repDate = new Date();
let day = repDate.getDate();
let month = repDate.getMonth() + 1;
let year = repDate.getFullYear();
const pdfFileName =
year +
"-" +
("0" + month).slice(-2) +
"-" +
("0" + day).slice(-2) +
"_-_Appeal_Form";
const renderedPDFBuffer = await streamToBuffer(renderedPDF);
const data = await createAppealPDFBlob(
renderedPDFBuffer,
containerID,
blobProgress.pinswg_name || blobProgress.caseObj.ticketnumber
);
if (isDownload) {
const filename = `${pdfFileName}.pdf`;
res.setHeader("Content-Type", "application/pdf");
res.setHeader(
"Content-Disposition",
`attachment; filename="${filename}"`
);
return res.status(200).send(renderedPDFBuffer);
}
return respondSuccess(res, {
status: "success",
data: data,
path: `/files/${pdfFileName}.pdf`
});
} catch (error) {
return respondError(res, {
status: 400,
code: "GENERATE_APPEAL_PDF_FAILED",
message: "Failed to generate appeal PDF"
});
}
}