From 08356a32addf987bf05aa78960749304df510d18 Mon Sep 17 00:00:00 2001 From: Steve Reis <stevereis93@gmail.com> Date: Sun, 26 Sep 2021 19:40:53 +0200 Subject: [PATCH] WIP: mutation for transient --- .../connectors/datashield/main.connector.ts | 6 ++++++ .../connectors/exareme/main.connector.ts | 9 +++++++++ api/src/engine/engine.interfaces.ts | 4 ++++ api/src/engine/engine.resolver.ts | 11 ++++++++++- .../transient/transient-create.input.ts | 7 +++++++ .../models/transient/transient.model.ts | 5 +++++ api/src/schema.gql | 19 ++++++++++++++++--- 7 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 api/src/engine/models/transient/transient-create.input.ts create mode 100644 api/src/engine/models/transient/transient.model.ts diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts index c81cc65..cfa03be 100644 --- a/api/src/engine/connectors/datashield/main.connector.ts +++ b/api/src/engine/connectors/datashield/main.connector.ts @@ -1,8 +1,14 @@ import { Observable } from 'rxjs'; import { IEngineService } from 'src/engine/engine.interfaces'; import { Domain } from 'src/engine/models/domain.model'; +import { TransientCreateInput } from 'src/engine/models/transient/transient-create.input'; +import { Transient } from 'src/engine/models/transient/transient.model'; export default class DataShieldService implements IEngineService { + createTransient(data: TransientCreateInput): Promise<Transient> | Transient { + throw new Error('Method not implemented.'); + } + getDomains(): Domain[] { throw new Error('Method not implemented.'); } diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index aa8fd7d..30a7a6e 100644 --- a/api/src/engine/connectors/exareme/main.connector.ts +++ b/api/src/engine/connectors/exareme/main.connector.ts @@ -5,6 +5,8 @@ import { firstValueFrom, map, Observable } from 'rxjs'; import { IEngineOptions, IEngineService } from 'src/engine/engine.interfaces'; import { Domain } from 'src/engine/models/domain.model'; import { Group } from 'src/engine/models/group.model'; +import { TransientCreateInput } from 'src/engine/models/transient/transient-create.input'; +import { Transient } from 'src/engine/models/transient/transient.model'; import { Variable } from 'src/engine/models/variable.model'; import { dataToCategory, dataToGroup, dataToVariable } from './converters'; import { Hierarchy } from './interfaces/hierarchy.interface'; @@ -16,6 +18,13 @@ export default class ExaremeService implements IEngineService { private readonly httpService: HttpService, ) {} + createTransient(data: TransientCreateInput): Transient | Promise<Transient> { + return { + id: 'test', + label: 'test', + }; + } + async getDomains(ids: string[]): Promise<Domain[]> { const path = this.options.baseurl + 'pathologies'; diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts index 09b86b7..ec9bcd7 100644 --- a/api/src/engine/engine.interfaces.ts +++ b/api/src/engine/engine.interfaces.ts @@ -1,6 +1,8 @@ import { Request } from 'express'; import { Observable } from 'rxjs'; import { Domain } from './models/domain.model'; +import { TransientCreateInput } from './models/transient/transient-create.input'; +import { Transient } from './models/transient/transient.model'; export interface IEngineOptions { type: string; @@ -24,6 +26,8 @@ export interface IEngineService { startExperimentTransient(request: Request): Observable<string>; + createTransient(data: TransientCreateInput): Promise<Transient> | Transient; + 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 beeb589..750a2d6 100644 --- a/api/src/engine/engine.resolver.ts +++ b/api/src/engine/engine.resolver.ts @@ -1,8 +1,10 @@ import { Inject } from '@nestjs/common'; -import { Args, Query, Resolver } from '@nestjs/graphql'; +import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { ENGINE_SERVICE } from './engine.constants'; import { IEngineService } from './engine.interfaces'; import { Domain } from './models/domain.model'; +import { TransientCreateInput } from './models/transient/transient-create.input'; +import { Transient } from './models/transient/transient.model'; @Resolver() export class EngineResolver { @@ -17,4 +19,11 @@ export class EngineResolver { ) { return this.engineService.getDomains(ids); } + + @Mutation(() => Transient) + async createTransient( + @Args('data') transientCreateInput: TransientCreateInput, + ) { + return this.engineService.createTransient(transientCreateInput); + } } diff --git a/api/src/engine/models/transient/transient-create.input.ts b/api/src/engine/models/transient/transient-create.input.ts new file mode 100644 index 0000000..d4b012c --- /dev/null +++ b/api/src/engine/models/transient/transient-create.input.ts @@ -0,0 +1,7 @@ +import { Field, InputType } from '@nestjs/graphql'; + +@InputType() +export class TransientCreateInput { + @Field() + name: string; +} diff --git a/api/src/engine/models/transient/transient.model.ts b/api/src/engine/models/transient/transient.model.ts new file mode 100644 index 0000000..4831c0f --- /dev/null +++ b/api/src/engine/models/transient/transient.model.ts @@ -0,0 +1,5 @@ +import { ObjectType } from '@nestjs/graphql'; +import { Entity } from '../entity.model'; + +@ObjectType() +export class Transient extends Entity {} diff --git a/api/src/schema.gql b/api/src/schema.gql index 023cdbe..5657a0d 100644 --- a/api/src/schema.gql +++ b/api/src/schema.gql @@ -4,7 +4,7 @@ type Category { id: String! - label: String! + label: String } type Variable { @@ -18,7 +18,7 @@ type Variable { type Group { id: String! - label: String! + label: String description: String groups: [Group!]! variables: [Variable!]! @@ -26,7 +26,7 @@ type Group { type Domain { id: String! - label: String! + label: String description: String groups: [Group!]! variables: [Variable!]! @@ -34,6 +34,19 @@ type Domain { rootGroup: Group! } +type Transient { + id: String! + label: String +} + type Query { domains(ids: [String!] = []): [Domain!]! } + +type Mutation { + createTransient(data: TransientCreateInput!): Transient! +} + +input TransientCreateInput { + name: String! +} -- GitLab