From 8bf0a4248f5ac1af18cc0d385e48425da793ce30 Mon Sep 17 00:00:00 2001
From: stevereis <stevereis93@gmail.com>
Date: Mon, 22 Nov 2021 18:01:59 +0100
Subject: [PATCH] Add param type value algorithm input

---
 api/src/engine/connectors/exareme/converters.ts | 16 +++++++++++-----
 .../connectors/exareme/transformations.ts       |  1 +
 .../input/algorithm-parameter.input.ts          | 17 ++++++++++++++++-
 api/src/schema.gql                              |  6 ++++++
 4 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index 61bcce8..1fe5af2 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -1,7 +1,10 @@
 import { Category } from 'src/engine/models/category.model';
 import { Algorithm } from 'src/engine/models/experiment/algorithm.model';
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
-import { AlgorithmParamInput } from 'src/engine/models/experiment/input/algorithm-parameter.input';
+import {
+  AlgorithmParamInput,
+  ParamType,
+} from 'src/engine/models/experiment/input/algorithm-parameter.input';
 import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
 import { Group } from 'src/engine/models/group.model';
 import { ResultUnion } from 'src/engine/models/result/common/result-union.model';
@@ -65,14 +68,17 @@ const algoParamInputToData = (param: AlgorithmParamInput) => {
   return {
     name: param.id,
     label: param.id,
-    value: param.value.join(','),
+    value:
+      param.type === ParamType.NUMBER
+        ? Number(param.value)
+        : param.value.join(','),
   };
 };
 
 export const experimentInputToData = (data: ExperimentCreateInput) => {
   const params = {
     algorithm: {
-      parameters: [
+      parameters: data.algorithm.parameters.map(algoParamInputToData).concat([
         {
           name: 'dataset',
           label: 'dataset',
@@ -93,7 +99,7 @@ export const experimentInputToData = (data: ExperimentCreateInput) => {
           label: 'y',
           value: data.variables.join(','),
         },
-      ].concat(data.algorithm.parameters.map(algoParamInputToData)),
+      ]),
       type: data.algorithm.type ?? 'string',
       name: data.algorithm.id,
     },
@@ -185,7 +191,7 @@ export const dataJSONtoResult = (
     case 'descriptive_stats':
       return descriptiveDataToTableResult(result);
     default:
-      return [];
+      return dataToRaw(result);
   }
 };
 
diff --git a/api/src/engine/connectors/exareme/transformations.ts b/api/src/engine/connectors/exareme/transformations.ts
index 528ecf4..d53a44d 100644
--- a/api/src/engine/connectors/exareme/transformations.ts
+++ b/api/src/engine/connectors/exareme/transformations.ts
@@ -34,6 +34,7 @@ export const transformToExperiment = jsonata(`
 
     $toArray := function($x) { $type($x) = 'array' ? $x : [$x]};
 
+
     {
         "name": name,
         "id": uuid,
diff --git a/api/src/engine/models/experiment/input/algorithm-parameter.input.ts b/api/src/engine/models/experiment/input/algorithm-parameter.input.ts
index 9b550ae..ce27f32 100644
--- a/api/src/engine/models/experiment/input/algorithm-parameter.input.ts
+++ b/api/src/engine/models/experiment/input/algorithm-parameter.input.ts
@@ -1,10 +1,25 @@
-import { Field, InputType } from '@nestjs/graphql';
+import { Field, InputType, registerEnumType } from '@nestjs/graphql';
+
+export enum ParamType {
+  STRING,
+  NUMBER,
+}
+
+registerEnumType(ParamType, {
+  name: 'ParamType',
+});
 
 @InputType()
 export class AlgorithmParamInput {
   @Field()
   id: string;
 
+  @Field(() => ParamType, {
+    nullable: true,
+    defaultValue: ParamType.STRING,
+  })
+  type?: ParamType;
+
   @Field(() => [String])
   value: string[];
 }
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 58bd470..962d5a4 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -207,9 +207,15 @@ input AlgorithmInput {
 
 input AlgorithmParamInput {
   id: String!
+  type: ParamType = STRING
   value: [String!]!
 }
 
+enum ParamType {
+  STRING
+  NUMBER
+}
+
 input ExperimentEditInput {
   name: String
   shared: Boolean
-- 
GitLab