diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts index ba948ad8e870efd9d4e0c326fca02949d43234c3..5c4c2ad9b93723e365ade10a596e7f1071002750 100644 --- a/api/src/engine/connectors/exareme/converters.ts +++ b/api/src/engine/connectors/exareme/converters.ts @@ -122,6 +122,6 @@ export const dataToTransient = (data: TransientDataResult): Experiment => { return { title: data.name, - result: tables, + results: tables, }; }; diff --git a/api/src/engine/models/experiment/experiment.model.ts b/api/src/engine/models/experiment/experiment.model.ts index 42dd04f5b500e2e65bcc2ec2d36a12c3104287b1..bf0881247afdf3b13f8e9e29e9a3653b1cb2d69d 100644 --- a/api/src/engine/models/experiment/experiment.model.ts +++ b/api/src/engine/models/experiment/experiment.model.ts @@ -1,5 +1,26 @@ -import { Field, GraphQLISODateTime, ObjectType } from '@nestjs/graphql'; -import { Result } from '../result/result.model'; +import { + createUnionType, + Field, + GraphQLISODateTime, + ObjectType, +} from '@nestjs/graphql'; +import { DummyResult } from '../result/dummy-result.model'; +import { TableResult } from '../result/table-result.model'; + +export const ResultUnion = createUnionType({ + name: 'ResultUnion', + types: () => [TableResult, DummyResult], + resolveType(value) { + if (value.metadatas) { + return TableResult; + } + if (value.listMax) { + return DummyResult; + } + + return null; + }, +}); @ObjectType() export class Experiment { @@ -18,6 +39,6 @@ export class Experiment { @Field(() => GraphQLISODateTime, { nullable: true }) finished_at?: Date; - @Field(() => [Result]) - result: Result[]; + @Field(() => [ResultUnion]) + results: Array<typeof ResultUnion>; } diff --git a/api/src/engine/models/result/result.model.ts b/api/src/engine/models/result/common/result.model.ts similarity index 100% rename from api/src/engine/models/result/result.model.ts rename to api/src/engine/models/result/common/result.model.ts diff --git a/api/src/engine/models/result/dummy-result.model.ts b/api/src/engine/models/result/dummy-result.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..99e36f5c90b9100e1cd46ed9fa67f613a46864b5 --- /dev/null +++ b/api/src/engine/models/result/dummy-result.model.ts @@ -0,0 +1,14 @@ +import { Field, ObjectType } from '@nestjs/graphql'; +import { Result } from './common/result.model'; + +@ObjectType() +export class DummyResult extends Result { + @Field() + name: string; + + @Field(() => [[String]]) + data: string[][]; + + @Field(() => [String]) + listMax: string[]; +} diff --git a/api/src/engine/models/result/table-result.model.ts b/api/src/engine/models/result/table-result.model.ts index 226de836c736057a18c0dcc351c92056e3c3de88..aa732d77f854a0cb938a842a760720f703b43946 100644 --- a/api/src/engine/models/result/table-result.model.ts +++ b/api/src/engine/models/result/table-result.model.ts @@ -1,6 +1,6 @@ import { Field, ObjectType } from '@nestjs/graphql'; import { MetaData } from './common/metadata.model'; -import { Result } from './result.model'; +import { Result } from './common/result.model'; @ObjectType() export class TableResult extends Result { diff --git a/api/src/schema.gql b/api/src/schema.gql index 8d97521e5e945f00017d16828f128212571b1c7c..f51b3333332088bb34723a4e4c4db2cb1c2806ef 100644 --- a/api/src/schema.gql +++ b/api/src/schema.gql @@ -34,8 +34,9 @@ type Domain { rootGroup: Group! } -type Result { - groupBy: String +type MetaData { + name: String! + type: String! } type Experiment { @@ -44,7 +45,7 @@ type Experiment { created_at: DateTime update_at: DateTime finished_at: DateTime - result: [Result!]! + results: [ResultUnion!]! } """ @@ -52,9 +53,20 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date """ scalar DateTime -type MetaData { +union ResultUnion = TableResult | DummyResult + +type TableResult { + groupBy: String name: String! - type: String! + data: [[String!]!]! + metadatas: [MetaData!]! +} + +type DummyResult { + groupBy: String + name: String! + data: [[String!]!]! + listMax: [String!]! } type Query {