From ee2d14d399b773aa1858f9fdf6dc6b37ef0f4bbe Mon Sep 17 00:00:00 2001
From: stevereis <stevereis93@gmail.com>
Date: Wed, 13 Oct 2021 14:40:50 +0200
Subject: [PATCH] Simplify group data needed from engines

---
 .../connectors/datashield/main.connector.ts   | 42 +++++++++++++++----
 .../engine/connectors/exareme/converters.ts   |  4 +-
 api/src/engine/models/domain.model.ts         | 13 +++++-
 api/src/engine/models/group.model.ts          |  5 +--
 api/src/engine/models/variable.model.ts       |  8 ++--
 api/src/schema.gql                            | 14 ++++---
 6 files changed, 64 insertions(+), 22 deletions(-)

diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts
index 4a0f222..3ee3fbb 100644
--- a/api/src/engine/connectors/datashield/main.connector.ts
+++ b/api/src/engine/connectors/datashield/main.connector.ts
@@ -14,38 +14,66 @@ export default class DataShieldService implements IEngineService {
   getAlgorithms(): Algorithm[] | Promise<Algorithm[]> {
     throw new Error('Method not implemented.');
   }
+
   createExperiment(
     data: ExperimentCreateInput,
     isTransient: boolean,
   ): Experiment | Promise<Experiment> {
     throw new Error('Method not implemented.');
   }
+
   listExperiments(
     page: number,
     name: string,
   ): ListExperiments | Promise<ListExperiments> {
     throw new Error('Method not implemented.');
   }
+
   getExperiment(uuid: string): Experiment | Promise<Experiment> {
     throw new Error('Method not implemented.');
   }
+
   removeExperiment(
     uuid: string,
   ): PartialExperiment | Promise<PartialExperiment> {
     throw new Error('Method not implemented.');
   }
+
   editExperient(
     uuid: string,
     expriment: ExperimentEditInput,
   ): Experiment | Promise<Experiment> {
     throw new Error('Method not implemented.');
   }
+
   getDomains(): Domain[] {
-    throw new Error('Method not implemented.');
+    return [
+      {
+        id: 'Dummy',
+        label: 'Dummy',
+        datasets: [{ id: 'DummyDataSet' }],
+        groups: [
+          {
+            id: 'DummyGroup',
+            variables: ['DummyVar'],
+            groups: [],
+          },
+        ],
+        rootGroup: { id: 'DummyGroup', variables: [], groups: [] },
+        variables: [{ id: 'DummyVar', type: 'string' }],
+      },
+    ];
   }
 
-  getActiveUser(): Observable<string> {
-    throw new Error('Method not implemented.');
+  getActiveUser(): string {
+    const dummyUser = {
+      username: 'anonymous',
+      subjectId: 'anonymousId',
+      fullname: 'anonymous',
+      email: 'anonymous@anonymous.com',
+      agreeNDA: true,
+    };
+    return JSON.stringify(dummyUser);
   }
 
   editActiveUser(): Observable<string> {
@@ -72,11 +100,11 @@ export default class DataShieldService implements IEngineService {
     throw new Error('Method not implemented.');
   }
 
-  getExperiments(): Observable<string> {
-    throw new Error('Method not implemented.');
+  getExperiments(): string {
+    return '[]';
   }
 
-  getAlgorithmsREST(): Observable<string> {
-    throw new Error('Method not implemented.');
+  getAlgorithmsREST(): string {
+    return '[]';
   }
 }
diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index 8081104..07fb2b4 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -28,7 +28,9 @@ export const dataToGroup = (data: Hierarchy): Group => {
     id: data.code,
     label: data.label,
     groups: data.groups ? data.groups.map(dataToGroup) : [],
-    variables: data.variables ? data.variables.map(dataToVariable) : [],
+    variables: data.variables
+      ? data.variables.map((data: VariableEntity) => data.code)
+      : [],
   };
 };
 
diff --git a/api/src/engine/models/domain.model.ts b/api/src/engine/models/domain.model.ts
index 8c3c593..f5b8def 100644
--- a/api/src/engine/models/domain.model.ts
+++ b/api/src/engine/models/domain.model.ts
@@ -1,9 +1,20 @@
 import { Field, ObjectType } from '@nestjs/graphql';
 import { Category } from './category.model';
+import { Entity } from './entity.model';
 import { Group } from './group.model';
+import { Variable } from './variable.model';
 
 @ObjectType()
-export class Domain extends Group {
+export class Domain extends Entity {
+  @Field({ nullable: true })
+  description?: string;
+
+  @Field(() => [Group])
+  groups: Group[];
+
+  @Field(() => [Variable])
+  variables: Variable[];
+
   @Field(() => [Category])
   datasets: Category[];
 
diff --git a/api/src/engine/models/group.model.ts b/api/src/engine/models/group.model.ts
index c2087ba..0cb97a4 100644
--- a/api/src/engine/models/group.model.ts
+++ b/api/src/engine/models/group.model.ts
@@ -1,6 +1,5 @@
 import { Field, ObjectType } from '@nestjs/graphql';
 import { Entity } from './entity.model';
-import { Variable } from './variable.model';
 
 @ObjectType()
 export class Group extends Entity {
@@ -10,6 +9,6 @@ export class Group extends Entity {
   @Field(() => [Group])
   groups: Group[];
 
-  @Field(() => [Variable])
-  variables: Variable[];
+  @Field(() => [String], { description: "List of variable's ids" })
+  variables: string[];
 }
diff --git a/api/src/engine/models/variable.model.ts b/api/src/engine/models/variable.model.ts
index e3c4098..8650f48 100644
--- a/api/src/engine/models/variable.model.ts
+++ b/api/src/engine/models/variable.model.ts
@@ -11,9 +11,9 @@ export class Variable extends Entity {
   @Field({ nullable: true })
   description?: string;
 
-  @Field(() => [Category])
-  enumerations: Category[];
+  @Field(() => [Category], { nullable: true, defaultValue: [] })
+  enumerations?: Category[];
 
-  @Field(() => [Group])
-  groups: Group[];
+  @Field(() => [Group], { nullable: true, defaultValue: [] })
+  groups?: Group[];
 }
diff --git a/api/src/schema.gql b/api/src/schema.gql
index aad6841..ee828b1 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -7,21 +7,23 @@ type Category {
   label: String
 }
 
-type Variable {
+type Group {
   id: String!
   label: String
-  type: String!
   description: String
-  enumerations: [Category!]!
   groups: [Group!]!
+
+  """List of variable's ids"""
+  variables: [String!]!
 }
 
-type Group {
+type Variable {
   id: String!
   label: String
+  type: String!
   description: String
-  groups: [Group!]!
-  variables: [Variable!]!
+  enumerations: [Category!]
+  groups: [Group!]
 }
 
 type Domain {
-- 
GitLab