From d3b37dbc5a4cd04cddd1b94a2317f2f02eea86bc Mon Sep 17 00:00:00 2001
From: stevereis <stevereis93@gmail.com>
Date: Tue, 28 Sep 2021 14:08:00 +0200
Subject: [PATCH] WIP : add union type for testing purpose

---
 .../engine/connectors/exareme/converters.ts   |  2 +-
 .../models/experiment/experiment.model.ts     | 29 ++++++++++++++++---
 .../result/{ => common}/result.model.ts       |  0
 .../models/result/dummy-result.model.ts       | 14 +++++++++
 .../models/result/table-result.model.ts       |  2 +-
 api/src/schema.gql                            | 22 ++++++++++----
 6 files changed, 58 insertions(+), 11 deletions(-)
 rename api/src/engine/models/result/{ => common}/result.model.ts (100%)
 create mode 100644 api/src/engine/models/result/dummy-result.model.ts

diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index ba948ad..5c4c2ad 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -122,6 +122,6 @@ export const dataToTransient = (data: TransientDataResult): Experiment => {
 
   return {
     title: data.name,
-    result: tables,
+    results: tables,
   };
 };
diff --git a/api/src/engine/models/experiment/experiment.model.ts b/api/src/engine/models/experiment/experiment.model.ts
index 42dd04f..bf08812 100644
--- a/api/src/engine/models/experiment/experiment.model.ts
+++ b/api/src/engine/models/experiment/experiment.model.ts
@@ -1,5 +1,26 @@
-import { Field, GraphQLISODateTime, ObjectType } from '@nestjs/graphql';
-import { Result } from '../result/result.model';
+import {
+  createUnionType,
+  Field,
+  GraphQLISODateTime,
+  ObjectType,
+} from '@nestjs/graphql';
+import { DummyResult } from '../result/dummy-result.model';
+import { TableResult } from '../result/table-result.model';
+
+export const ResultUnion = createUnionType({
+  name: 'ResultUnion',
+  types: () => [TableResult, DummyResult],
+  resolveType(value) {
+    if (value.metadatas) {
+      return TableResult;
+    }
+    if (value.listMax) {
+      return DummyResult;
+    }
+
+    return null;
+  },
+});
 
 @ObjectType()
 export class Experiment {
@@ -18,6 +39,6 @@ export class Experiment {
   @Field(() => GraphQLISODateTime, { nullable: true })
   finished_at?: Date;
 
-  @Field(() => [Result])
-  result: Result[];
+  @Field(() => [ResultUnion])
+  results: Array<typeof ResultUnion>;
 }
diff --git a/api/src/engine/models/result/result.model.ts b/api/src/engine/models/result/common/result.model.ts
similarity index 100%
rename from api/src/engine/models/result/result.model.ts
rename to api/src/engine/models/result/common/result.model.ts
diff --git a/api/src/engine/models/result/dummy-result.model.ts b/api/src/engine/models/result/dummy-result.model.ts
new file mode 100644
index 0000000..99e36f5
--- /dev/null
+++ b/api/src/engine/models/result/dummy-result.model.ts
@@ -0,0 +1,14 @@
+import { Field, ObjectType } from '@nestjs/graphql';
+import { Result } from './common/result.model';
+
+@ObjectType()
+export class DummyResult extends Result {
+  @Field()
+  name: string;
+
+  @Field(() => [[String]])
+  data: string[][];
+
+  @Field(() => [String])
+  listMax: string[];
+}
diff --git a/api/src/engine/models/result/table-result.model.ts b/api/src/engine/models/result/table-result.model.ts
index 226de83..aa732d7 100644
--- a/api/src/engine/models/result/table-result.model.ts
+++ b/api/src/engine/models/result/table-result.model.ts
@@ -1,6 +1,6 @@
 import { Field, ObjectType } from '@nestjs/graphql';
 import { MetaData } from './common/metadata.model';
-import { Result } from './result.model';
+import { Result } from './common/result.model';
 
 @ObjectType()
 export class TableResult extends Result {
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 8d97521..f51b333 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -34,8 +34,9 @@ type Domain {
   rootGroup: Group!
 }
 
-type Result {
-  groupBy: String
+type MetaData {
+  name: String!
+  type: String!
 }
 
 type Experiment {
@@ -44,7 +45,7 @@ type Experiment {
   created_at: DateTime
   update_at: DateTime
   finished_at: DateTime
-  result: [Result!]!
+  results: [ResultUnion!]!
 }
 
 """
@@ -52,9 +53,20 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date
 """
 scalar DateTime
 
-type MetaData {
+union ResultUnion = TableResult | DummyResult
+
+type TableResult {
+  groupBy: String
   name: String!
-  type: String!
+  data: [[String!]!]!
+  metadatas: [MetaData!]!
+}
+
+type DummyResult {
+  groupBy: String
+  name: String!
+  data: [[String!]!]!
+  listMax: [String!]!
 }
 
 type Query {
-- 
GitLab