From 8a3d2daf0c69444576ce8e5dc4ce1a4ded25a766 Mon Sep 17 00:00:00 2001
From: Dennis Collaris <d.collaris@me.com>
Date: Wed, 19 Mar 2025 20:35:03 +0100
Subject: [PATCH] feat: manual query

---
 src/readers/queryService.ts | 83 +++++++++++++++++++++----------------
 1 file changed, 47 insertions(+), 36 deletions(-)

diff --git a/src/readers/queryService.ts b/src/readers/queryService.ts
index 4609e93..2743354 100644
--- a/src/readers/queryService.ts
+++ b/src/readers/queryService.ts
@@ -148,42 +148,53 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu
         return;
       }
 
-      const visualQuery = activeQueryInfo.graph; //ss.queries[0].graph;
-      log.debug('Received query request:', message, headers, visualQuery);
-      if (visualQuery.nodes.length === 0) {
-        log.info('Empty query received');
-        publisher.publishResultToFrontend({
-          nodes: [],
-          edges: [],
-          nodeCounts: { updatedAt: 0 },
-          metaData: {
-            topological: { density: 0, self_loops: 0 },
-            nodes: { count: 0, labels: [], types: {} },
-            edges: { count: 0, labels: [], types: {} },
-          },
-        });
-        return;
-      }
+      let query: string;
+      let cypher: QueryCypher;
+      if (message.manualQuery != null) {
+        log.info('Received manual query');
+        query = message.manualQuery;
+        cypher = {
+          query: query,
+          countQuery: 'RETURN 1;', // TODO
+        };
+      } else {
+        const visualQuery = activeQueryInfo.graph; //ss.queries[0].graph;
+        log.debug('Received query request:', message, headers, visualQuery);
+        if (visualQuery.nodes.length === 0) {
+          log.info('Empty query received');
+          publisher.publishResultToFrontend({
+            nodes: [],
+            edges: [],
+            nodeCounts: { updatedAt: 0 },
+            metaData: {
+              topological: { density: 0, self_loops: 0 },
+              nodes: { count: 0, labels: [], types: {} },
+              edges: { count: 0, labels: [], types: {} },
+            },
+          });
+          return;
+        }
 
-      const queryBuilderSettings = activeQueryInfo.settings; //ss.queries[0].settings;
-      const ml = message.ml;
-      const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, ml);
+        const queryBuilderSettings = activeQueryInfo.settings; //ss.queries[0].settings;
+        const ml = message.ml;
+        const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, ml);
 
-      log.debug('translating query:', convertedQuery);
-      publisher.publishStatusToFrontend('Translating');
+        log.debug('translating query:', convertedQuery);
+        publisher.publishStatusToFrontend('Translating');
 
-      const cypher = query2Cypher(convertedQuery);
-      const query = cypher.query;
-      if (query == null) {
-        log.error('Error translating query:', convertedQuery);
-        publisher.publishErrorToFrontend('Error translating query');
-        return;
-      }
+        cypher = query2Cypher(convertedQuery);
+        query = cypher.query;
+        if (query == null) {
+          log.error('Error translating query:', convertedQuery);
+          publisher.publishErrorToFrontend('Error translating query');
+          return;
+        }
 
-      log.debug('Translated query FROM:', convertedQuery);
-      log.info('Translated query:', query);
-      log.info('Translated query:', cypher.countQuery);
-      publisher.publishTranslationResultToFrontend(query);
+        log.debug('Translated query FROM:', convertedQuery);
+        log.info('Translated query:', query);
+        log.info('Translated query:', cypher.countQuery);
+        publisher.publishTranslationResultToFrontend(query);
+      }
 
       for (let i = 0; i < ss.dbConnections.length; i++) {
         try {
@@ -202,11 +213,11 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu
           log.debug('Query result!');
           log.info(`Query executed in ${formatTimeDifference(Date.now() - startTime)}`);
 
-          if (convertedQuery.machineLearning && convertedQuery.machineLearning.length > 0) {
-            for (let i = 0; i < convertedQuery.machineLearning.length; i++) {
+          if (message.ml && message.ml.length > 0) {
+            for (let i = 0; i < message.ml.length; i++) {
               try {
-                publisher.publishMachineLearningRequest(result, convertedQuery.machineLearning[i], headers);
-                log.debug('Published machine learning request', convertedQuery.machineLearning[i]);
+                publisher.publishMachineLearningRequest(result, message.ml[i], headers);
+                log.debug('Published machine learning request', message.ml[i]);
               } catch (error) {
                 log.error('Error publishing machine learning request', error);
                 publisher.publishErrorToFrontend('Error publishing machine learning request');
-- 
GitLab