From 3c36fece2ef16d06ef68978466068cca0c0d7d63 Mon Sep 17 00:00:00 2001
From: stevereis <stevereis93@gmail.com>
Date: Tue, 9 Nov 2021 10:42:43 +0100
Subject: [PATCH] Add coVariables in expriment

---
 api/src/engine/connectors/exareme/converters.ts      | 10 ++++++++++
 api/src/engine/connectors/exareme/transformations.ts |  5 +++--
 api/src/engine/models/experiment/experiment.model.ts |  3 +++
 .../experiment/input/experiment-create.input.ts      |  3 +++
 api/src/schema.gql                                   | 12 ++++++++----
 5 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index 3dd9532..c3eed2d 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -116,6 +116,16 @@ export const experimentInputToData = (data: ExperimentCreateInput) => {
     },
     name: data.name,
   };
+
+  if (data.coVariables && data.coVariables.length) {
+    params.algorithm.parameters.push({
+      name: 'x',
+      label: 'x',
+      value: data.coVariables.join(','),
+    });
+  }
+
+  return params;
 };
 
 export const descriptiveDataToTableResult = (
diff --git a/api/src/engine/connectors/exareme/transformations.ts b/api/src/engine/connectors/exareme/transformations.ts
index 74bc69a..d43e249 100644
--- a/api/src/engine/connectors/exareme/transformations.ts
+++ b/api/src/engine/connectors/exareme/transformations.ts
@@ -5,7 +5,7 @@ import * as jsonata from 'jsonata'; // old import style needed due to 'export =
 
 export const transformToAlgorithms = jsonata(`
 (
-    $params := ["y", "pathology", "dataset", "filter"];
+    $params := ["y", "pathology", "dataset", "filter", "x"];
 
     $toArray := function($x) { $type($x) = 'array' ? $x : [$x]};
 
@@ -30,7 +30,7 @@ export const transformToAlgorithms = jsonata(`
 
 export const transformToExperiment = jsonata(`
 ( 
-    $params := ["y", "pathology", "dataset", "filter"];
+    $params := ["y", "pathology", "dataset", "filter", "x"];
 
     $toArray := function($x) { $type($x) = 'array' ? $x : [$x]};
 
@@ -46,6 +46,7 @@ export const transformToExperiment = jsonata(`
         "updateAt": updated,
         "domain": algorithm.parameters[name = "pathology"].value,
         "variables": $split(algorithm.parameters[name = "y"].value, ','),
+        "coVariables": $toArray($split(algorithm.parameters[name = "x"].value, ',')),
         "filter": algorithm.parameters[name = "filter"].value,
         "datasets": $split(algorithm.parameters[name = "dataset"].value, ','),
         "algorithm": {
diff --git a/api/src/engine/models/experiment/experiment.model.ts b/api/src/engine/models/experiment/experiment.model.ts
index 06e28b4..0a76e9d 100644
--- a/api/src/engine/models/experiment/experiment.model.ts
+++ b/api/src/engine/models/experiment/experiment.model.ts
@@ -43,6 +43,9 @@ export class Experiment {
   @Field(() => [String])
   variables: string[];
 
+  @Field(() => [String], { nullable: true, defaultValue: [] })
+  coVariables?: string[];
+
   @Field()
   algorithm: Algorithm;
 
diff --git a/api/src/engine/models/experiment/input/experiment-create.input.ts b/api/src/engine/models/experiment/input/experiment-create.input.ts
index b0b57ce..8c8104a 100644
--- a/api/src/engine/models/experiment/input/experiment-create.input.ts
+++ b/api/src/engine/models/experiment/input/experiment-create.input.ts
@@ -24,6 +24,9 @@ export class ExperimentCreateInput {
   @Field(() => [String])
   variables: string[];
 
+  @Field(() => [String], { nullable: true, defaultValue: [] })
+  coVariables?: string[];
+
   @Field()
   algorithm: AlgorithmInput;
 
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 2c77f09..a657a44 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -37,7 +37,7 @@ type Domain {
 }
 
 type AlgorithmParameter {
-  name: String!
+  id: String!
   value: [String!]
   label: String
   description: String
@@ -50,7 +50,7 @@ type AlgorithmParameter {
 }
 
 type Algorithm {
-  name: String!
+  id: String!
   parameters: [AlgorithmParameter!]
   label: String
   type: String
@@ -140,6 +140,7 @@ type Experiment {
   filter: String
   domain: String!
   variables: [String!]!
+  coVariables: [String!]
   algorithm: Algorithm!
   name: String!
 }
@@ -158,6 +159,7 @@ type PartialExperiment {
   filter: String
   domain: String
   variables: [String!]
+  coVariables: [String!]
   algorithm: Algorithm
   name: String
 }
@@ -187,6 +189,7 @@ input ExperimentCreateInput {
   filter: String
   domain: String!
   variables: [String!]!
+  coVariables: [String!] = []
   algorithm: AlgorithmInput!
   name: String!
   transformations: [FormulaTransformation!]
@@ -194,13 +197,13 @@ input ExperimentCreateInput {
 }
 
 input AlgorithmInput {
-  name: String!
+  id: String!
   parameters: [AlgorithmParamInput!] = []
   type: String!
 }
 
 input AlgorithmParamInput {
-  name: String!
+  id: String!
   value: [String!]!
 }
 
@@ -211,5 +214,6 @@ input FormulaTransformation {
 
 input ExperimentEditInput {
   name: String
+  shared: Boolean
   viewed: Boolean
 }
-- 
GitLab