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