From a2207f4dcdf1f4ce2e9e41d782d2f251c7152e56 Mon Sep 17 00:00:00 2001
From: Robin Leber <rleber98@gmail.com>
Date: Mon, 10 Jun 2024 15:01:07 +0200
Subject: [PATCH] feat: stop, modify and restart architecture

---
 src/docker/dockerManager.js      |  1 +
 src/functions/helperFunctions.js | 61 ++++++++++++++++++++++++--------
 2 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/src/docker/dockerManager.js b/src/docker/dockerManager.js
index b3420fc..891cb22 100644
--- a/src/docker/dockerManager.js
+++ b/src/docker/dockerManager.js
@@ -366,4 +366,5 @@ module.exports = {
   pauseDockerContainer,
   unpauseDockerContainer,
   dockerCleanUp,
+  killDockerContainer,
 };
diff --git a/src/functions/helperFunctions.js b/src/functions/helperFunctions.js
index 244c378..db25102 100644
--- a/src/functions/helperFunctions.js
+++ b/src/functions/helperFunctions.js
@@ -5,6 +5,9 @@ const {
   runDockerContainer,
   pauseDockerContainer,
   unpauseDockerContainer,
+  removeDockerContainer,
+  removeDockerImage,
+  killDockerContainer,
 } = require("../docker/dockerManager");
 
 const fillDockerJS = async (code) => {
@@ -55,7 +58,11 @@ const addCustomCodeToJson = async (newElement) => {
       (element) => element.id === newElement.id
     );
     if (existingFilter) {
+      await killDockerContainer(newElement.id);
+      await removeDockerContainer(newElement.id);
+      await removeDockerImage(newElement.id);
       existingFilter.code = newElement.code;
+      existingFilter.isDeployed = false;
     } else {
       jsonArray.push(newElement);
     }
@@ -72,6 +79,24 @@ const addCustomCodeToJson = async (newElement) => {
   }
 };
 
+const setIsDeployed = async (id) => {
+  const dataFilePath = path.resolve(__dirname, "../../customCodeDatabase.json");
+  try {
+    const data = await fs.readFile(dataFilePath, "utf-8");
+    let jsonArray;
+    jsonArray = JSON.parse(data);
+    let elementToChange = jsonArray.find((element) => element.id === id);
+    elementToChange.isDeployed = true;
+    await fs.writeFile(
+      dataFilePath,
+      JSON.stringify(jsonArray, null, 2),
+      "utf8"
+    );
+  } catch (err) {
+    console.error(err);
+  }
+};
+
 const getCustomCodes = async () => {
   const dataFilePath = path.resolve(__dirname, "../../customCodeDatabase.json");
 
@@ -95,20 +120,23 @@ let CONTAINERPORT = 9090;
 const deployArchitecture = async () => {
   const customCodes = await getCustomCodes();
   for (const customCode of customCodes) {
-    await fillDockerJS(customCode.code);
-    const filePath = path.join(__dirname, "../../");
-    const dockerImageName = customCode.id;
-    const dockerContainerName = customCode.id;
-    await buildDockerImage(filePath, dockerImageName);
-    await runDockerContainer(
-      dockerImageName,
-      dockerContainerName,
-      HOSTPORT,
-      CONTAINERPORT
-    );
-    await emptyDockerJS();
-    HOSTPORT++;
-    CONTAINERPORT++;
+    if (!customCode.isDeployed) {
+      await fillDockerJS(customCode.code);
+      const filePath = path.join(__dirname, "../../");
+      const dockerImageName = customCode.id;
+      const dockerContainerName = customCode.id;
+      await buildDockerImage(filePath, dockerImageName);
+      await runDockerContainer(
+        dockerImageName,
+        dockerContainerName,
+        HOSTPORT,
+        CONTAINERPORT
+      );
+      await emptyDockerJS();
+      HOSTPORT++;
+      CONTAINERPORT++;
+      await setIsDeployed(customCode.id);
+    }
   }
 };
 
@@ -122,8 +150,11 @@ const stopArchitecture = async () => {
 const restartArchitecture = async () => {
   const customCodes = await getCustomCodes();
   for (const customCode of customCodes) {
-    await unpauseDockerContainer(customCode.id);
+    if (customCode.isDeployed) {
+      await unpauseDockerContainer(customCode.id);
+    }
   }
+  await deployArchitecture();
 };
 
 const clearDocker = () => {
-- 
GitLab