From d46bb8468b4446e320bd84bb32daa063e350723a Mon Sep 17 00:00:00 2001
From: lior <diler.lior@gmail.com>
Date: Sat, 30 Jul 2022 08:34:08 +0200
Subject: [PATCH] untested restructuration pattern for getallmembers

---
 src/commandExecutor.js | 10 ++++---
 src/commandHelper.js   | 38 +++++++++++++++++++-------
 src/dataTranslator.js  | 60 +++---------------------------------------
 3 files changed, 37 insertions(+), 71 deletions(-)

diff --git a/src/commandExecutor.js b/src/commandExecutor.js
index 28d42db..211ef43 100644
--- a/src/commandExecutor.js
+++ b/src/commandExecutor.js
@@ -7,8 +7,9 @@ const commandHelper = require("./commandHelper");
  * @description Executes commands interpreted from dataTranslator.
  * */
 
-async function getAllMembersButton(targetGroup, userMediaID)
+export async function getAllMembers(targetGroupID, userDatabase)
 {
+    const targetGroup = await databaseManager.findGroupByGroupID(targetGroupID)
     let outputMessage = "";
     outputMessage = "There are currently " + targetGroup.users.length + " users that joined the group " + targetGroup.groupName + ". Those users are: ";
     const groupUsers = targetGroup.users;
@@ -31,16 +32,17 @@ async function getAllMembersButton(targetGroup, userMediaID)
         outputMessage += "\n\nDisconnected members:";
         outputMessage += disconnectedUsers;
     }
+    return outputMessage;
 }
 
-async function verifyGetAllMembers(command, userMediaID, targetGroup)
+export async function verifyAndExecuteGetAllMembers(data, userMediaID)
 {
-    //targetGroup is defined if from button, it isn't otherwhise
     const userDatabase = await databaseManager.findUserByMediaID(userMediaID);
     const groups = await databaseManager.findGroupsByUserID(userMediaID);
 
     const templateOptions = commandHelper.getGroupIDsWithCondition(userDatabase.connectedGroups, groups,  true);
-    return await commandHelper.executeCommandOnGroup(serverData.text,getAllMembersButton(),
+
+    return await commandHelper.executeCommandOnGroup(data.text,getAllMembers,
         {
             "type":"talkToGroup",
             "command":"AL",
diff --git a/src/commandHelper.js b/src/commandHelper.js
index 30a28be..1c238db 100644
--- a/src/commandHelper.js
+++ b/src/commandHelper.js
@@ -98,21 +98,39 @@ function getGroupIDsButtonTemplateFormat(groups)
  */
 async function executeCommandOnGroup(command, action, buttonTemplate, data, userMediaID)
 {
-    const words = command.split(" ");
+    let words = command.split(" ");
+    words.shift();
+
     let changedData = data;
+
+    //this should be passed as parameter
     const userGroups = await databaseManager.findGroupsByUserID(userMediaID);
-    if(userGroups.length === 1)
-        changedData = action(userGroups[0]);
-    else if(words.length > 1) {
-        const targetGroup = userGroups.find(group => group.groupName === words[1])
-        if(targetGroup !== undefined)
+    if(userGroups.length === 0)
+        changedData.text = "You are not connected to any groups. Please connect to a group first.;"
+    else if(userGroups.length === 1)
+        changedData = action(userGroups[0]._id);
+
+    if(words.length === 0)
+        changedData.buttonTemplate = buttonTemplate;
+
+    let targetGroup = undefined
+
+    for(let i = 0; i < userGroups.length; ++i)
+    {
+        const groupNameArray = userGroups[i].groupName.split("");
+        if(groupNameArray.every(name => words.includes(name)))
         {
-            changedData = action(targetGroup, userMediaID);
-        }else changedData.buttonTemplate = buttonTemplate;
+            targetGroup = userGroups[i];
+            break;
+        }
     }
-    else {
-        changedData.buttonTemplate = buttonTemplate;
+    if(targetGroup !== undefined)
+    {
+        changedData = action(targetGroup, userMediaID);
     }
+    else
+        changedData.buttonTemplate = buttonTemplate;
+
     return changedData;
 }
 
diff --git a/src/dataTranslator.js b/src/dataTranslator.js
index 5a1a905..e584823 100755
--- a/src/dataTranslator.js
+++ b/src/dataTranslator.js
@@ -6,7 +6,7 @@
 const mqt = require('./rabbitMQ/send.js')
 const databaseManager = require('./mongoose.js');
 const commandHelper = require('./commandHelper');
-
+const commandExecutor = require('./commandExecutor')
 /**
  *
  * Interprets the serverData JSON. Based on the state of the sender of the message and the command used, apply states to the user and prepare an answer.
@@ -85,39 +85,7 @@ async function sendMessage(serverData, isUser)
 	}
 	else if(userText.includes("getallmembers"))
 	{
-		const templateOptions = commandHelper.getGroupIDsWithCondition(userDatabase.connectedGroups, groups,  true);
-
-		data = await commandHelper.executeCommandOnGroup(serverData.text,async function(targetGroup)
-			{
-				data.text = "There are currently " + targetGroup.users.length + " users that joined the group " + targetGroup.groupName + ". Those users are: ";
-				const groupUsers = targetGroup.users;
-				let connectedUsers = "";
-				let disconnectedUsers = "";
-				for(let i = 0; i < groupUsers.length; ++i)
-				{
-					if(groupUsers[i].connected)
-					{
-						connectedUsers += "\n- " + groupUsers[i].nickname;
-						continue;
-					}
-					disconnectedUsers += "\n- " + groupUsers[i].nickname;
-				}
-
-				data.text += "\n\nConnected members:";
-				data.text += connectedUsers;
-				if(disconnectedUsers !== "")
-				{
-					data.text += "\n\nDisconnected members:";
-					data.text += disconnectedUsers;
-				}
-
-				return data;
-			},
-			{
-				"type":"talkToGroup",
-				"command":"AL",
-				"options":templateOptions
-			}, data, userMediaID)
+		data = await commandExecutor.verifyAndExecuteGetAllMembers(data, data.connectors.id);
 	}
 	else if(userText === "getconnectedgroups")
 	{
@@ -409,29 +377,7 @@ async function handleButtonDatabase(serverData)
 	}
 	else if(serverData.buttonID.includes("AL_"))
 	{
-		const targetGroup = await databaseManager.findGroupByGroupID(buttonValue);
-
-		data.text = "There are currently " + targetGroup.users.length + " users that joined the group " + targetGroup.groupName + ". Those users are: ";
-		const groupUsers = targetGroup.users;
-		let connectedUsers = "";
-		let disconnectedUsers = "";
-		for(let i = 0; i < groupUsers.length; ++i)
-		{
-			if(groupUsers[i].connected)
-			{
-				connectedUsers += "\n- " + groupUsers[i].nickname;
-				continue;
-			}
-			disconnectedUsers += "\n- " + groupUsers[i].nickname;
-		}
-
-		data.text += "\n\nConnected members:"
-		data.text += connectedUsers;
-		if(disconnectedUsers !== "")
-		{
-			data.text += "\n\nDisconnected members:";
-			data.text += disconnectedUsers;
-		}
+		data = await commandExecutor.getAllMembers(buttonValue);
 	}
 	else if(serverData.buttonID.includes("QT_"))
 	{
-- 
GitLab