diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts index c81cc65fbef911bcb160acc7bdb516ec3aa80e1d..cfa03be24607f07f1713ddcff4f5c3b0d8a1d040 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 aa8fd7d531f63c3b44f0c546619889269f8c0dcb..30a7a6e283885e97c3dd7ef4321dd61a04d21c3c 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 09b86b731d670a83b598936d834b8993f4a8b27f..ec9bcd7d2ba113d292f0b68ff3bce599f4007f6c 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 beeb589fc6de4f3294efffea16e4b55c1ac96f61..750a2d6683b9317daa7589970cbc161003698625 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 0000000000000000000000000000000000000000..d4b012c25106bc9633c7043d3c05932a19eb5a67 --- /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 0000000000000000000000000000000000000000..4831c0fff16c45f4247038ddfa60c61a3e0ee105 --- /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 023cdbeda9b5556163b2cd09140be601bd7cbc9c..5657a0dff1bb60212db3b62b0c2ff9bd60ac3ee0 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! +}