From 08c7d67f96cf74f8e725e677b9ad02d5d7c632c0 Mon Sep 17 00:00:00 2001
From: Manuel Spuhler <manuel.spuhler@gmail.com>
Date: Mon, 25 Oct 2021 13:24:38 +0000
Subject: [PATCH] Formula input types

---
 api/src/engine/connectors/exareme/converters.ts   | 12 ++++++++++++
 .../experiment/input/experiment-create.input.ts   | 15 +++++++++++++++
 api/src/schema.gql                                |  7 +++++++
 3 files changed, 34 insertions(+)

diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index 1e43bfb..608ac77 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -88,6 +88,18 @@ export const experimentInputToData = (data: ExperimentCreateInput) => {
           label: 'y',
           value: data.variables.join(','),
         },
+        {
+          name: 'formula',
+          value: {
+            single: data.transformations.map((t) => ({
+              var_name: t.name,
+              unary_operation: t.operation,
+            })),
+            interactions: data.interactions.map((v) =>
+              v.reduce((a, v, i) => ({ ...a, [`var${i + 1}`]: v }), {}),
+            ),
+          },
+        },
       ].concat(data.algorithm.parameters.map(algoParamInputToData)),
       type: data.algorithm.type ?? 'string',
       name: data.algorithm.name,
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 85a5404..b0b57ce 100644
--- a/api/src/engine/models/experiment/input/experiment-create.input.ts
+++ b/api/src/engine/models/experiment/input/experiment-create.input.ts
@@ -1,6 +1,15 @@
 import { Field, InputType } from '@nestjs/graphql';
 import { AlgorithmInput } from './algorithm.input';
 
+@InputType()
+export class FormulaTransformation {
+  @Field()
+  name: string;
+
+  @Field()
+  operation: string;
+}
+
 @InputType()
 export class ExperimentCreateInput {
   @Field(() => [String])
@@ -20,4 +29,10 @@ export class ExperimentCreateInput {
 
   @Field()
   name: string;
+
+  @Field(() => [FormulaTransformation], { nullable: true })
+  transformations: FormulaTransformation[];
+
+  @Field(() => [[String]], { nullable: true })
+  interactions: string[][];
 }
diff --git a/api/src/schema.gql b/api/src/schema.gql
index b2c3ddb..1d30677 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -189,6 +189,8 @@ input ExperimentCreateInput {
   variables: [String!]!
   algorithm: AlgorithmInput!
   name: String!
+  transformations: [FormulaTransformation!]
+  interactions: [[String!]!]
 }
 
 input AlgorithmInput {
@@ -202,6 +204,11 @@ input AlgorithmParamInput {
   value: [String!]!
 }
 
+input FormulaTransformation {
+  name: String!
+  operation: String!
+}
+
 input ExperimentEditInput {
   name: String
   viewed: Boolean
-- 
GitLab