From bafbb7df5a25494781ee5c73a24ba31c39b2003c Mon Sep 17 00:00:00 2001
From: stevereis <stevereis93@gmail.com>
Date: Thu, 13 Jan 2022 08:22:59 +0100
Subject: [PATCH] feat: add longitudinal info on datasets

---
 api/src/engine/connectors/exareme/converters.ts    | 14 ++++++++++----
 .../engine/connectors/exareme/main.connector.ts    |  4 ++--
 api/src/engine/models/dataset.model.ts             |  8 ++++++++
 api/src/engine/models/domain.model.ts              |  6 +++---
 api/src/schema.gql                                 | 10 ++++++++--
 5 files changed, 31 insertions(+), 11 deletions(-)
 create mode 100644 api/src/engine/models/dataset.model.ts

diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index 54dc362..f81c8bd 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -1,10 +1,8 @@
 import { Category } from 'src/engine/models/category.model';
+import { Dataset } from 'src/engine/models/dataset.model';
 import { Algorithm } from 'src/engine/models/experiment/algorithm.model';
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
-import {
-  AlgorithmParamInput,
-  ParamType,
-} from 'src/engine/models/experiment/input/algorithm-parameter.input';
+import { AlgorithmParamInput } 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';
@@ -51,6 +49,14 @@ export const dataToCategory = (data: Entity): Category => {
   };
 };
 
+export const dataToDataset = (data: Entity): Dataset => {
+  return {
+    id: data.code,
+    label: data.label,
+    isLongitudinal: !!data.code.toLowerCase().includes('longitudinal'),
+  };
+};
+
 export const dataToVariable = (data: VariableEntity): Variable => {
   return {
     id: data.code,
diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts
index 2f78318..5733366 100644
--- a/api/src/engine/connectors/exareme/main.connector.ts
+++ b/api/src/engine/connectors/exareme/main.connector.ts
@@ -24,7 +24,7 @@ import { Group } from 'src/engine/models/group.model';
 import { Variable } from 'src/engine/models/variable.model';
 import {
   dataToAlgorithms,
-  dataToCategory,
+  dataToDataset,
   dataToExperiment,
   dataToGroup,
   dataToVariable,
@@ -141,7 +141,7 @@ export default class ExaremeService implements IEngineService {
               label: data.label,
               groups: groups,
               rootGroup: dataToGroup(data.metadataHierarchy),
-              datasets: data.datasets ? data.datasets.map(dataToCategory) : [],
+              datasets: data.datasets ? data.datasets.map(dataToDataset) : [],
               variables: data.metadataHierarchy
                 ? this.flattenVariables(data.metadataHierarchy, groups)
                 : [],
diff --git a/api/src/engine/models/dataset.model.ts b/api/src/engine/models/dataset.model.ts
new file mode 100644
index 0000000..a15340b
--- /dev/null
+++ b/api/src/engine/models/dataset.model.ts
@@ -0,0 +1,8 @@
+import { Field, ObjectType } from '@nestjs/graphql';
+import { Entity } from './entity.model';
+
+@ObjectType()
+export class Dataset extends Entity {
+  @Field({ nullable: true, defaultValue: false })
+  isLongitudinal?: boolean;
+}
diff --git a/api/src/engine/models/domain.model.ts b/api/src/engine/models/domain.model.ts
index f5b8def..1cfef22 100644
--- a/api/src/engine/models/domain.model.ts
+++ b/api/src/engine/models/domain.model.ts
@@ -1,5 +1,5 @@
 import { Field, ObjectType } from '@nestjs/graphql';
-import { Category } from './category.model';
+import { Dataset } from './dataset.model';
 import { Entity } from './entity.model';
 import { Group } from './group.model';
 import { Variable } from './variable.model';
@@ -15,8 +15,8 @@ export class Domain extends Entity {
   @Field(() => [Variable])
   variables: Variable[];
 
-  @Field(() => [Category])
-  datasets: Category[];
+  @Field(() => [Dataset])
+  datasets: Dataset[];
 
   @Field(() => Group)
   rootGroup: Group;
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 7a13c77..7e173ad 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -2,9 +2,10 @@
 # THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
 # ------------------------------------------------------
 
-type Category {
+type Dataset {
   id: String!
   label: String
+  isLongitudinal: Boolean
 }
 
 type Group {
@@ -17,6 +18,11 @@ type Group {
   variables: [String!]
 }
 
+type Category {
+  id: String!
+  label: String
+}
+
 type Variable {
   id: String!
   label: String
@@ -32,7 +38,7 @@ type Domain {
   description: String
   groups: [Group!]!
   variables: [Variable!]!
-  datasets: [Category!]!
+  datasets: [Dataset!]!
   rootGroup: Group!
 }
 
-- 
GitLab