From 293c1a05a0bca92408c9217da9d85461abe1429e Mon Sep 17 00:00:00 2001
From: Omar Elkadi <omar.elkadi@stud.th-deg.de>
Date: Mon, 31 May 2021 07:39:14 +0200
Subject: [PATCH] sicknotefile name = matrikel + auto file extention

---
 server/src/routes/patientRoutes.ts | 47 +++++++++++++++++-------------
 src/views/SickForm.vue             | 10 ++++---
 2 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/server/src/routes/patientRoutes.ts b/server/src/routes/patientRoutes.ts
index 6789dfe..f40fa35 100644
--- a/server/src/routes/patientRoutes.ts
+++ b/server/src/routes/patientRoutes.ts
@@ -1,6 +1,8 @@
 import { NextFunction, Request, Response, Router } from "express";
 import { writeFile } from "fs";
 import multer = require("multer");
+import { extname } from "path";
+
 //import * as bodyParser from "body-parser"; // not necessary, since body-parser is part of NodeJS
 
 export class patientRoutes {
@@ -14,21 +16,26 @@ export class patientRoutes {
 
     routes() {
 
-        // configure a multer Storage (folder + filename)
+        // configure a multer Storage path (folder + filename)
         var storage = multer.diskStorage({
-          destination: function(req, file, cb) {
+          destination: function (req, file, cb) {
+            //uploads is the folder name
             cb(null, "uploads");
           },
-          filename: function(req, file, cb) {
-            cb(null, Date.now()+ '-' + file.fieldname + '.pdf' );
+          filename: function (req, file, cb) {
+            var patientStudent = JSON.parse(req.body.patientStudent);
+            cb(
+              null,
+              patientStudent.MatrikelNumber + extname(file.originalname)
+            );
           }
         });
         //create upload instance (will recive the file and the body from request)
         var upload = multer({ storage: storage });
         console.log("patient routes");
 
-        // recives the file from request 
-        this.router.post("/ppatient", upload.single('evd') , this.post);
+        // recives the file from request -> the name of the file in the single() must be the same on the client side in FormData
+        this.router.post("/ppatient", upload.single('sickNoteEvidence') , this.post);
         this.router.get("/patient", this.get);
     }
 
@@ -41,31 +48,29 @@ export class patientRoutes {
 
     post(req: Request, res: Response) {
 
+        //recived the body as a stringified JOSN
         var body = req.body; // response body
         
+        // parse JSON to Objects
+        var patientStudent = JSON.parse(body.patientStudent)
+        var sickNote = JSON.parse(body.sickNoteData);
+
+        var sicknessReport = {
+            patientStudent,
+            sickNote
+        }
         const file = req.file;
         if (!file) {
             console.log("not file error")
         }
 
-        var patientStudent = JSON.parse(body.patientStudent)
-        var sickNote = JSON.parse(body.sickNote)
-        body = {
-            patientStudent,
-            sickNote
-        }
         res.status(200).send("the body and the file are recived" + JSON.stringify(body))
 
-        console.log(typeof(body))
-        console.log(typeof(patientStudent))
-        console.log(typeof(sickNote))
-
-
-        const path = './public/' + patientStudent.MatrikelNumber+ '.json'
+        const path = './public/'+ 'sickNoteReport'+ patientStudent.MatrikelNumber+ '.json'
     
-        writeFile(path, JSON.stringify(body), function (err) {
-            if (err) return console.log(err)
-            else return console.log('file generated in path: ' + path)
+        writeFile(path, JSON.stringify(sicknessReport), function(err) {
+          if (err) return console.log(err);
+          else return console.log("file generated in path: " + path);
         });
 
     }
diff --git a/src/views/SickForm.vue b/src/views/SickForm.vue
index 76dc18b..cf41b2e 100644
--- a/src/views/SickForm.vue
+++ b/src/views/SickForm.vue
@@ -111,7 +111,8 @@
       </div>
       <div class="form-group col-md-4">
         <label for="formFile" class="form-label">Krankmeldung</label>
-        <input class="form-control" type="file" id="formFile" ref="file" accept=".pdf|.docx|image/*" @change="handleFileUpload()">
+        <!-- set a refrence on tag using ref="file" will allow us to get the file -->
+        <input class="form-control" type="file" id="formFile" ref="file" accept=".pdf,.docx,image/*" @change="handleFileUpload()" required>
       </div>
     </div>
     <!--
@@ -402,7 +403,7 @@ export default {
     }
   },
   methods: {
-    handleFileUpload (event) {
+    handleFileUpload () {
       this.EvidenceFile = this.$refs.file.files[0]
     },
     async OnSubmit () {
@@ -410,8 +411,9 @@ export default {
 
       // FormData is a dictionary type -> (key , value)
       formData.append('patientStudent', JSON.stringify(this.patientStudent))
-      formData.append('sickNote', JSON.stringify(this.SickNote))
-      formData.append('file', this.EvidenceFile)
+      formData.append('sickNoteData', JSON.stringify(this.SickNote))
+
+      formData.append('sickNoteEvidence', this.EvidenceFile)
 
       var res = await axios.post('http://localhost:3000/ppatient', formData,
         {
-- 
GitLab