fix: two bugs in Cloud Storage PDF viewing surfaced by live testing
- PDF viewer hung on "Loading" forever for cloud-backed PDFs: streamFileTo
pipes with {end: false} (by design, so cloud-storage.ts's own routes can
call res.end() themselves), but the new /pdf-files/:id cloud branch never
did, so the HTTP response never completed.
- Documents page showed nothing for patients whose PDFs are only in Cloud
Storage: the page lists categories from the legacy PdfGroup table, which
new saves stopped populating. savePdfToCloudStorage now also ensures a
blob-less PdfGroup row exists per patient/category so the category still
appears, with actual files served from Cloud Storage via the existing
merge in the pdf-files/group listing routes.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -290,9 +290,11 @@ router.get(
|
|||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
await storage.streamFileTo(res, cloudId);
|
await storage.streamFileTo(res, cloudId);
|
||||||
|
if (!res.writableEnded) res.end();
|
||||||
} catch (streamErr) {
|
} catch (streamErr) {
|
||||||
console.error("Error streaming cloud PDF file:", streamErr);
|
console.error("Error streaming cloud PDF file:", streamErr);
|
||||||
if (!res.headersSent) res.status(500).json({ error: "Failed to stream PDF" });
|
if (!res.headersSent) res.status(500).json({ error: "Failed to stream PDF" });
|
||||||
|
else if (!res.writableEnded) res.end();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -613,6 +613,29 @@ export const cloudStorageStorage: IStorage = {
|
|||||||
await cloudStorageStorage.finalizeFileUpload(cloudFile.id!);
|
await cloudStorageStorage.finalizeFileUpload(cloudFile.id!);
|
||||||
const finalFile = await cloudStorageStorage.getFile(cloudFile.id!);
|
const finalFile = await cloudStorageStorage.getFile(cloudFile.id!);
|
||||||
if (!finalFile) throw new Error("Failed to finalize PDF upload to cloud storage");
|
if (!finalFile) throw new Error("Failed to finalize PDF upload to cloud storage");
|
||||||
|
|
||||||
|
// Ensure a (blob-less) PdfGroup row exists for this patient/category so the
|
||||||
|
// Documents page — which lists categories from PdfGroup — still shows this
|
||||||
|
// category even when every PDF in it lives in Cloud Storage.
|
||||||
|
const CATEGORY_TO_TITLE_KEY: Record<string, { titleKey: string; title: string }> = {
|
||||||
|
Eligibility: { titleKey: "ELIGIBILITY_STATUS", title: "Eligibility Status" },
|
||||||
|
Claims: { titleKey: "INSURANCE_CLAIM", title: "Claims" },
|
||||||
|
PreAuth: { titleKey: "INSURANCE_CLAIM_PREAUTH", title: "Preauth" },
|
||||||
|
"Claim Status": { titleKey: "CLAIM_STATUS", title: "Claim Status" },
|
||||||
|
Attachments: { titleKey: "OTHER", title: "Attachments" },
|
||||||
|
};
|
||||||
|
const mapping = CATEGORY_TO_TITLE_KEY[category];
|
||||||
|
if (mapping) {
|
||||||
|
const existingGroup = await db.pdfGroup.findFirst({
|
||||||
|
where: { patientId, titleKey: mapping.titleKey as any },
|
||||||
|
});
|
||||||
|
if (!existingGroup) {
|
||||||
|
await db.pdfGroup.create({
|
||||||
|
data: { patientId, title: mapping.title, titleKey: mapping.titleKey as any },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return finalFile;
|
return finalFile;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user