From 07e753caba2f4f5f1563e839329a27500a25718e Mon Sep 17 00:00:00 2001
From: Steve Reis <stevereis93@gmail.com>
Date: Thu, 30 Sep 2021 15:08:33 +0200
Subject: [PATCH] WIP : uniform experiment and transient

---
 .../engine/connectors/datashield/main.connector.ts |  5 +++++
 .../engine/connectors/exareme/main.connector.ts    |  5 +++++
 api/src/engine/engine.interfaces.ts                | 14 ++++++++++----
 api/src/engine/engine.resolver.ts                  |  8 ++++++--
 api/src/schema.gql                                 |  2 +-
 5 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts
index 1cdbb50..c5784b7 100644
--- a/api/src/engine/connectors/datashield/main.connector.ts
+++ b/api/src/engine/connectors/datashield/main.connector.ts
@@ -5,6 +5,11 @@ import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-c
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
 
 export default class DataShieldService implements IEngineService {
+  createExperiment(
+    data: ExperimentCreateInput,
+  ): Experiment | Promise<Experiment> {
+    throw new Error('Method not implemented.');
+  }
   createTransient(
     data: ExperimentCreateInput,
   ): Experiment | Promise<Experiment> {
diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts
index aa0b30f..c3dea2d 100644
--- a/api/src/engine/connectors/exareme/main.connector.ts
+++ b/api/src/engine/connectors/exareme/main.connector.ts
@@ -24,6 +24,11 @@ export default class ExaremeService implements IEngineService {
     private readonly options: IEngineOptions,
     private readonly httpService: HttpService,
   ) {}
+  createExperiment(
+    data: ExperimentCreateInput,
+  ): Experiment | Promise<Experiment> {
+    throw new Error('Method not implemented.');
+  }
 
   async createTransient(data: ExperimentCreateInput): Promise<Experiment> {
     const form = experimentInputToData(data);
diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts
index 0d90e92..5289075 100644
--- a/api/src/engine/engine.interfaces.ts
+++ b/api/src/engine/engine.interfaces.ts
@@ -10,8 +10,18 @@ export interface IEngineOptions {
 }
 
 export interface IEngineService {
+  //GraphQL
   getDomains(ids: string[]): Domain[] | Promise<Domain[]>;
 
+  createTransient(
+    data: ExperimentCreateInput,
+  ): Promise<Experiment> | Experiment;
+
+  createExperiment(
+    data: ExperimentCreateInput,
+  ): Promise<Experiment> | Experiment;
+
+  // Standard REST API call
   getAlgorithms(request: Request): Observable<string>;
 
   getExperiments(request: Request): Observable<string>;
@@ -24,10 +34,6 @@ export interface IEngineService {
 
   startExperimentTransient(request: Request): Observable<string>;
 
-  createTransient(
-    data: ExperimentCreateInput,
-  ): Promise<Experiment> | Experiment;
-
   startExperiment(request: Request): Observable<string>;
 
   getActiveUser(request: Request): Observable<string>;
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index e3de433..c75c68e 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -21,9 +21,13 @@ export class EngineResolver {
   }
 
   @Mutation(() => Experiment)
-  async createTransient(
+  async createExperiment(
     @Args('data') experimentCreateInput: ExperimentCreateInput,
+    @Args('transient', { nullable: true, defaultValue: false })
+    isTransient: boolean,
   ) {
-    return this.engineService.createTransient(experimentCreateInput);
+    return isTransient
+      ? this.engineService.createTransient(experimentCreateInput)
+      : this.engineService.createExperiment(experimentCreateInput);
   }
 }
diff --git a/api/src/schema.gql b/api/src/schema.gql
index c2ebe06..39dd34e 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -74,7 +74,7 @@ type Query {
 }
 
 type Mutation {
-  createTransient(data: ExperimentCreateInput!): Experiment!
+  createExperiment(transient: Boolean = false, data: ExperimentCreateInput!): Experiment!
 }
 
 input ExperimentCreateInput {
-- 
GitLab