From 9a1bf6dfde04a6d1ab6abb0b54bfa83359346553 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sat, 12 Jul 2025 17:04:29 +0200 Subject: [PATCH] provide files for viewing of uploaded files to inspection points --- .../admin/unit/inspectionController.ts | 30 +++++++++++++++++++ src/routes/admin/unit/inspection.ts | 5 ++++ .../inspectionPointResultService.ts | 21 +++++++++++++ 3 files changed, 56 insertions(+) diff --git a/src/controller/admin/unit/inspectionController.ts b/src/controller/admin/unit/inspectionController.ts index 1b35af0..f91b3d0 100644 --- a/src/controller/admin/unit/inspectionController.ts +++ b/src/controller/admin/unit/inspectionController.ts @@ -18,6 +18,8 @@ import { FileSystemHelper } from "../../../helpers/fileSystemHelper"; import { PdfExport } from "../../../helpers/pdfExport"; import { PDFDocument } from "pdf-lib"; import sharp from "sharp"; +import InspectionPointService from "../../../service/unit/inspection/inspectionPointService"; +import InspectionPointResultService from "../../../service/unit/inspection/inspectionPointResultService"; /** * @description get all inspections sorted by id not having newer inspection @@ -114,6 +116,34 @@ export async function getInspectionPrintoutById(req: Request, res: Response): Pr }); } +/** + * @description get inspection by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getInspectionPointUpload(req: Request, res: Response): Promise { + const inspectionId = req.params.id; + const inspectionPointId = req.params.pointId; + let result = await InspectionPointResultService.getForInspectionAndPoint(inspectionId, inspectionPointId); + + let filepath = FileSystemHelper.formatPath("inspection", inspectionId, result.value); + + if (result.inspectionPoint.others === "pdf") { + res.sendFile(filepath, { + headers: { + "Content-Type": "application/pdf", + }, + }); + } else { + let image = await sharp(filepath).png().toBuffer(); + res.set({ + "Content-Type": "image/png", + }); + res.send(image); + } +} + /** * @description get inspection by id * @param req {Request} Express req object diff --git a/src/routes/admin/unit/inspection.ts b/src/routes/admin/unit/inspection.ts index e57e1cd..6a43526 100644 --- a/src/routes/admin/unit/inspection.ts +++ b/src/routes/admin/unit/inspection.ts @@ -11,6 +11,7 @@ import { updateInspectionResults, getInspectionPrintoutById, finishInspection, + getInspectionPointUpload, } from "../../../controller/admin/unit/inspectionController"; import { inspectionFileUpload } from "../../../middleware/multer"; @@ -47,6 +48,10 @@ router.get("/:id/printout", async (req: Request, res: Response) => { await getInspectionPrintoutById(req, res); }); +router.get("/:id/:pointId/upload", async (req: Request, res: Response) => { + await getInspectionPointUpload(req, res); +}); + router.post( "/", PermissionHelper.passCheckMiddleware("create", "unit", "inspection"), diff --git a/src/service/unit/inspection/inspectionPointResultService.ts b/src/service/unit/inspection/inspectionPointResultService.ts index d294139..deb56a8 100644 --- a/src/service/unit/inspection/inspectionPointResultService.ts +++ b/src/service/unit/inspection/inspectionPointResultService.ts @@ -21,4 +21,25 @@ export default abstract class InspectionPointResultService { throw new DatabaseActionException("SELECT", "inspectionPointResult", err); }); } + /** + * @description get inspectionPointResults by inspection and point + * @returns {Promise>} + */ + static async getForInspectionAndPoint( + inspectionId: string, + inspectionPointId: string + ): Promise { + return await dataSource + .getRepository(inspectionPointResult) + .createQueryBuilder("inspectionPointResult") + .leftJoinAndSelect("inspectionPointResult.inspectionPoint", "inspectionPoint") + .where({ inspectionId, inspectionPointId }) + .getOneOrFail() + .then((res) => { + return res; + }) + .catch((err) => { + throw new DatabaseActionException("SELECT", "inspectionPointResult", err); + }); + } }