diff --git a/PROF-XXI FW Tool/server/controllers/link.js b/PROF-XXI FW Tool/server/controllers/link.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd2af9c4656870f36aa1172c7f1aca4f612b7722
--- /dev/null
+++ b/PROF-XXI FW Tool/server/controllers/link.js	
@@ -0,0 +1,341 @@
+const db = require("../database/database");
+const crypto = require("crypto");
+
+exports.generateLink = async (req, res) => {
+  const unitId = req.body.unitId;
+  const host = req.body.host;
+
+  // Setting up the current date in the format of YYYY-MM-DD
+  const date = new Date();
+  const day = ("0" + date.getDate()).slice(-2);
+  const month = ("0" + (date.getMonth() + 1)).slice(-2);
+  const year = date.getFullYear();
+  const hours = date.getHours();
+  const minutes = date.getMinutes();
+  const seconds = date.getSeconds();
+  const fullDate =
+    year +
+    "-" +
+    month +
+    "-" +
+    day +
+    " " +
+    hours +
+    ":" +
+    minutes +
+    ":" +
+    seconds;
+
+  // Setting up the Link
+  const linkCrypto = crypto.randomBytes(8).toString("base64");
+  const linkKey = linkCrypto.replace("/", "0");
+  const link = `http://${host}/scan/${req.userId}/${unitId}/${linkKey}`;
+
+  //////
+  db.query(
+    "INSERT INTO questionnaires (link, idunit, email, date, idtype, status) VALUES (?,?,?,?,?,?)",
+    [link, unitId, req.userEmail, fullDate, 1, "OPEN"],
+    (err, result) => {
+      if (result) {
+        res.json({
+          message:
+            "Link generated successfuly, Please copy it and send it to your participants :",
+          link: link,
+        });
+      } else {
+        res.json({ message: "There has been an error, please retry later" });
+      }
+    }
+  );
+};
+
+exports.getAllLinks = async (req, res) => {
+  db.query(
+    "SELECT idquestionnaire, link, units.name, date, status FROM questionnaires JOIN units ON questionnaires.idunit = units.idunit WHERE email = ?",
+    [req.userEmail],
+    (err, result) => {
+      if (result) {
+        var i = 0;
+        let linksResult = [];
+        while (result[i]) {
+          const { idquestionnaire, link, name, date, status } = result[i];
+          const dateString = JSON.stringify(date);
+          const dateView =
+            "Date: " +
+            dateString.split('"')[1].split("T")[0] +
+            " Time: " +
+            dateString.split('"')[1].split("T")[1].split(".")[0];
+
+          const linkObject = {
+            idquestionnaire: idquestionnaire,
+            link: link,
+            name: name,
+            date: dateView,
+            status: status,
+          };
+          linksResult.push(linkObject);
+          i = i + 1;
+        }
+        res.json({ linksResult: linksResult });
+      } else {
+        console.log(err);
+        res.status(404).json({ message: "Error while finding your links" });
+      }
+    }
+  );
+};
+
+exports.updateLink = async (req, res) => {
+  const idLink = req.body.idLink;
+  db.query(
+    "SELECT status FROM questionnaires WHERE idquestionnaire = ?",
+    [idLink],
+    (err, result) => {
+      if (result) {
+        const statusUpdated = result[0].status === "OPEN" ? "CLOSED" : "OPEN";
+        db.query(
+          "UPDATE questionnaires SET status = ? WHERE idquestionnaire=?",
+          [statusUpdated, idLink],
+          (err, result) => {
+            if (result) {
+              res.json({
+                updated: true,
+              });
+            }
+          }
+        );
+      } else {
+        console.log(err);
+      }
+    }
+  );
+};
+
+exports.getScansNumber = async (req, res) => {
+  console.log(req.userEmail);
+  db.query(
+    "SELECT COUNT(*) as num from questionnaires WHERE email = ?",
+    [req.userEmail],
+    (err, result) => {
+      if (result) {
+        res.json({ scansNumber: result[0].num });
+      }
+    }
+  );
+};
+
+exports.checkLink = async (req, res) => {
+  const userid = req.params.userid;
+  const unitid = req.params.unitid;
+  const scantoken = req.params.scantoken;
+  const host = req.params.host;
+
+  console.log(userid, unitid, scantoken);
+
+  const requestedLink = `http://${host}/scan/${userid}/${unitid}/${scantoken}`;
+
+  db.query(
+    "SELECT * FROM questionnaires WHERE link = ?",
+    [requestedLink],
+    (err, result) => {
+      if (err) {
+        console.log(err);
+      } else {
+        if (result.length > 0) {
+          if (result[0].status === "OPEN") {
+            res.json({
+              error: false,
+              authorized: true,
+              idquestionnaire: result[0].idquestionnaire,
+            });
+          } else {
+            res.json({ error: false, authorized: false });
+          }
+        } else {
+          res.json({ error: true });
+        }
+      }
+    }
+  );
+};
+
+exports.answerScan = async (req, res) => {
+  const user = req.body.user;
+  const userAnswers = req.body.userAnswers;
+  const idScan = req.body.idScan;
+
+  // Setting up the current date in the format of YYYY-MM-DD
+  const date = new Date();
+  const day = ("0" + date.getDate()).slice(-2);
+  const month = ("0" + (date.getMonth() + 1)).slice(-2);
+  const year = date.getFullYear();
+  const hours = date.getHours();
+  const minutes = date.getMinutes();
+  const seconds = date.getSeconds();
+  const fullDate =
+    year +
+    "-" +
+    month +
+    "-" +
+    day +
+    " " +
+    hours +
+    ":" +
+    minutes +
+    ":" +
+    seconds;
+
+  db.query(
+    "INSERT INTO answers (idquestionnaire,date, participantfirstname, participantlastname,participantemail,participantposition, A1, A2, A3 , A4, A5, A6, A7, A8, A9, A10, A11, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, D1, D2, D3, D4, D5, D6, D7, D8, D9, E1, E2, E3, E4, E5, E6, E7, E8) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+    [
+      idScan,
+      fullDate,
+      user.firstName,
+      user.lastName,
+      user.email,
+      user.position,
+      userAnswers.A1,
+      userAnswers.A2,
+      userAnswers.A3,
+      userAnswers.A4,
+      userAnswers.A5,
+      userAnswers.A6,
+      userAnswers.A7,
+      userAnswers.A8,
+      userAnswers.A9,
+      userAnswers.A10,
+      userAnswers.A11,
+      userAnswers.B1,
+      userAnswers.B2,
+      userAnswers.B3,
+      userAnswers.B4,
+      userAnswers.B5,
+      userAnswers.B6,
+      userAnswers.B7,
+      userAnswers.B8,
+      userAnswers.B9,
+      userAnswers.B10,
+      userAnswers.B11,
+      userAnswers.C1,
+      userAnswers.C2,
+      userAnswers.C3,
+      userAnswers.C4,
+      userAnswers.C5,
+      userAnswers.C6,
+      userAnswers.C7,
+      userAnswers.C8,
+      userAnswers.C9,
+      userAnswers.C10,
+      userAnswers.C11,
+      userAnswers.D1,
+      userAnswers.D2,
+      userAnswers.D3,
+      userAnswers.D4,
+      userAnswers.D5,
+      userAnswers.D6,
+      userAnswers.D7,
+      userAnswers.D8,
+      userAnswers.D9,
+      userAnswers.E1,
+      userAnswers.E2,
+      userAnswers.E3,
+      userAnswers.E4,
+      userAnswers.E5,
+      userAnswers.E6,
+      userAnswers.E7,
+      userAnswers.E8,
+    ],
+    (err, result) => {
+      if (result) {
+        db.query(
+          "UPDATE answers SET A = (A1+A2+A3+A4+A5+A6+A7+A8+A9+A10+A11)/11, B = (B1+B2+B3+B4+B5+B6+B7+B8+B9+B10+B11)/11, C=(C1+C2+C3+C4+C5+C6+C7+C8+C9+C10+C11)/11, D=(D1+D2+D3+D4+D5+D6+D7+D8+D9)/9, E=(E1+E2+E3+E4+E5+E6+E7+E8)/8 WHERE idanswer = ?",
+          [result.insertId]
+        );
+        db.query(
+          "UPDATE answers SET L1 = (A1+A2+A3+B1+B2+B3+C1+C2+C3+D1+D2+D3+E1+E2)/14, L2 = (A4+A5+A6+B4+B5+C4+C5+D4+D5+E3+E4)/11, L3=(A7+A8+B6+B7+C6+C7+D6+D7+E5+E6)/10, L4=(A9+B8+B9+C8+C9+D8+E7)/7, L5=(A10+A11+B10+B11+C10+C11+D9+E8)/8 WHERE idanswer = ?",
+          [result.insertId]
+        );
+
+        db.query(
+          "UPDATE answers SET Global_Mark=(A+B+C+D+E+L1+L2+L3+L4+L5)/10 WHERE idanswer = ?",
+          [result.insertId]
+        );
+
+        res.json({ added: true });
+      } else {
+        res.json({ added: false });
+      }
+    }
+  );
+};
+
+exports.getParticipantsNumber = async (req, res) => {
+  console.log(req.userEmail);
+  db.query(
+    "SELECT COUNT(*) as num from questionnaires JOIN answers ON questionnaires.idquestionnaire = answers.idquestionnaire WHERE email = ?",
+    [req.userEmail],
+    (err, result) => {
+      if (result) {
+        res.json({ participantsNumber: result[0].num });
+      }
+    }
+  );
+};
+
+exports.getParticipants = async (req, res) => {
+  const unitid = req.params.unitid;
+  db.query(
+    "SELECT participantfirstname, participantlastname, participantemail, answers.date FROM questionnaires JOIN answers ON questionnaires.idquestionnaire = answers.idquestionnaire WHERE idunit = ?",
+    [unitid],
+    (err, result) => {
+      if (result) {
+        var i = 0;
+        let participantsResult = [];
+        while (result[i]) {
+          const {
+            participantfirstname,
+            participantlastname,
+            participantemail,
+            date,
+          } = result[i];
+
+          const dateString = JSON.stringify(date);
+          const dateView =
+            "Date: " +
+            dateString.split('"')[1].split("T")[0] +
+            " Time: " +
+            dateString.split('"')[1].split("T")[1].split(".")[0];
+
+          const participant = {
+            participantfirstname: participantfirstname,
+            participantlastname: participantlastname,
+            participantemail: participantemail,
+            date: dateView,
+          };
+          participantsResult.push(participant);
+          i = i + 1;
+        }
+
+        res.json({ participantsResult: participantsResult });
+      } else {
+        console.log(err);
+      }
+    }
+  );
+};
+
+exports.getTotalParticipantsNumber = async (req, res) => {
+  db.query("SELECT COUNT(*) as num FROM answers", (err, result) => {
+    if (result) {
+      res.json({ totalParticipantsNumber: result[0].num });
+    }
+  });
+};
+
+exports.getTotalScansNumber = async (req, res) => {
+  db.query("SELECT COUNT(*) as num FROM questionnaires", (err, result) => {
+    if (result) {
+      res.json({ totalScansNumber: result[0].num });
+    }
+  });
+};