diff --git a/package-lock.json b/package-lock.json index 2c7deb3..cc3bfe2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,10 +11,12 @@ "dependencies": { "dotenv": "^17.4.2", "express": "^5.2.1", + "formidable": "^3.5.4", "pdf-parse-fork": "^1.2.0" }, "devDependencies": { "@types/express": "^5.0.6", + "@types/formidable": "^3.5.1", "@types/node": "^25.9.3", "nodemon": "^3.1.14", "ts-node": "^10.9.2", @@ -62,6 +64,27 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", @@ -136,6 +159,16 @@ "@types/send": "*" } }, + "node_modules/@types/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-aFQijSGbD8JCeEST2LEbwR7faHynbt43lojLIcTM/QhB2U06h41ZVRFVEql+Z1xdL+aKGIzm69V/P/uSW9N6XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", @@ -247,6 +280,12 @@ "dev": true, "license": "MIT" }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -456,6 +495,16 @@ "node": ">= 0.8" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", @@ -629,6 +678,23 @@ "url": "https://opencollective.com/express" } }, + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", diff --git a/package.json b/package.json index f70560d..0f18cab 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,12 @@ "dependencies": { "dotenv": "^17.4.2", "express": "^5.2.1", + "formidable": "^3.5.4", "pdf-parse-fork": "^1.2.0" }, "devDependencies": { "@types/express": "^5.0.6", + "@types/formidable": "^3.5.1", "@types/node": "^25.9.3", "nodemon": "^3.1.14", "ts-node": "^10.9.2", diff --git a/src/routes/purchase.routes.ts b/src/routes/purchase.routes.ts new file mode 100644 index 0000000..60a496a --- /dev/null +++ b/src/routes/purchase.routes.ts @@ -0,0 +1,74 @@ +import {Router, Request as ExpressRequest} from "express"; +import formidable from "formidable"; +import type { Files, File } from "formidable"; +// import pdf_parse from "../modules/pdf-parse"; + +// ---------------------------------------- +// Router config +// ---------------------------------------- +const router = Router(); + +// ---------------------------------------- +// Routes +// ---------------------------------------- +router.get("/", (req,res) => { + let html: string = ` +
`; + + res.send(html); +}); + +router.post("/file", async (req,res) => { + try { + const files = await file_form_handler(req); + + const file_paths: string[] = []; + + for (const file of Object.values(files) as any[]) { + if (Array.isArray(file)) { + for (const f of file) { + file_paths.push(f.filepath); + } + } else { + file_paths.push(file.filepath); + } + } + + const results_of_parsing = []; + + for (const path of file_paths) { + results_of_parsing.push(path); + } + + res.json(results_of_parsing); + } catch (error) { + console.error(error); + res.status(500).json({ + error: error instanceof Error ? error.message : "Unknown error" + }); + } +}); + +// fonction pour gérer la récéption des fichier par un form +function file_form_handler(req: ExpressRequest): Promise