Files
DentalManagementMH04/apps/Backend/src/routes/paymentOcrExtraction.ts

58 lines
1.5 KiB
TypeScript
Executable File

import { Router, Request, Response } from "express";
import multer from "multer";
import { ocrQueue } from "../queue/queues";
const router = Router();
// keep files in memory; FastAPI accepts them as multipart bytes
const upload = multer({ storage: multer.memoryStorage() });
const ALLOWED_MIMES = new Set([
"image/jpeg",
"image/png",
"image/tiff",
"image/bmp",
"image/jpg",
]);
// POST /payment-ocr/extract (field name: "files")
router.post(
"/extract",
upload.array("files"),
async (req: Request, res: Response): Promise<any> => {
const files = req.files as Express.Multer.File[] | undefined;
if (!files || files.length === 0) {
return res
.status(400)
.json({ error: "No image files uploaded. Use field name 'files'." });
}
const bad = files.filter((f) => !ALLOWED_MIMES.has(f.mimetype.toLowerCase()));
if (bad.length) {
return res.status(415).json({
error: `Unsupported file types: ${bad.map((b) => b.originalname).join(", ")}`,
});
}
const filesForQueue = files.map((f) => ({
originalname: f.originalname,
bufferBase64: f.buffer.toString("base64"),
mimetype: f.mimetype,
}));
const socketId: string | undefined =
(req.body?.socketId as string) ?? undefined;
const job = await ocrQueue.add("ocr", {
userId: (req.user as any)?.id ?? 0,
socketId,
files: filesForQueue,
});
return res.json({ jobId: job.id, status: "queued" });
}
);
export default router;