Skip to content
Snippets Groups Projects
Commit 8e2f9a3d authored by Steve Reis's avatar Steve Reis
Browse files

WIP : expriment mutation

Renamed DummyResult with RawResult
Added GraphQL type json
Added mechanism to convert result based on type data (need adaptations)
parent bb4423d5
No related branches found
No related tags found
No related merge requests found
......@@ -19,6 +19,7 @@
"apollo-server-express": "^3.3.0",
"axios": "^0.21.1",
"graphql": "^15.5.3",
"graphql-type-json": "^0.3.2",
"jsonata": "^1.8.5",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
......@@ -5582,6 +5583,14 @@
"graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0"
}
},
"node_modules/graphql-type-json": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz",
"integrity": "sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==",
"peerDependencies": {
"graphql": ">=0.8.0"
}
},
"node_modules/graphql-ws": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.4.0.tgz",
......@@ -14888,6 +14897,12 @@
"tslib": "^2.1.0"
}
},
"graphql-type-json": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz",
"integrity": "sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==",
"requires": {}
},
"graphql-ws": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.4.0.tgz",
......
......@@ -32,6 +32,7 @@
"apollo-server-express": "^3.3.0",
"axios": "^0.21.1",
"graphql": "^15.5.3",
"graphql-type-json": "^0.3.2",
"jsonata": "^1.8.5",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
......
import { Category } from 'src/engine/models/category.model';
import { Experiment } from 'src/engine/models/experiment/experiment.model';
import {
Experiment,
ResultUnion,
} from 'src/engine/models/experiment/experiment.model';
import { AlgorithmParameter } from 'src/engine/models/experiment/algorithm-parameter.model';
import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
import { Group } from 'src/engine/models/group.model';
......@@ -7,9 +10,12 @@ import { TableResult } from 'src/engine/models/result/table-result.model';
import { Variable } from 'src/engine/models/variable.model';
import { Entity } from './interfaces/entity.interface';
import { Hierarchy } from './interfaces/hierarchy.interface';
import { TransientDataResult } from './interfaces/transient/transient-data-result.interface';
import { VariableEntity } from './interfaces/variable-entity.interface';
import { transientToTable } from './transformations';
import { ExperimentData } from './interfaces/Experiment/experiment.interface';
import { ResultExperiment } from './interfaces/Experiment/result-experiment.interface';
import { RawResult } from 'src/engine/models/result/raw-result.model';
import { TransientDataResult } from './interfaces/transient/transient-data-result.interface';
export const dataToGroup = (data: Hierarchy): Group => {
return {
......@@ -86,3 +92,24 @@ export const dataToTransient = (
results: tabs,
};
};
export const dataToExperiment = (data: ExperimentData): Experiment => {
const exp: Experiment = dataToExperiment(data);
exp.results = data.result.map((result) => dataToResult(result));
return exp;
};
export const dataToRaw = (result: ResultExperiment): RawResult => {
return {
data: result.data,
};
};
export const dataToResult = (result: ResultExperiment): typeof ResultUnion => {
switch (result.type) {
default:
return dataToRaw(result);
}
};
import { ResultExperiment } from './result-experiment.interface';
export interface ExperimentData {
name: string;
result: ResultExperiment[];
}
export interface ResultExperiment {
data: unknown;
type: string;
}
......@@ -3,6 +3,11 @@
import * as jsonata from 'jsonata'; // old import style needed due to 'export = jsonata'
export const dataToExperiment = jsonata(`(
$
)
`);
export const transientToTable = jsonata(`
(
$e := function($x, $r) {($x != null) ? $x : ($r ? $r : '')};
......
......@@ -4,19 +4,19 @@ import {
GraphQLISODateTime,
ObjectType,
} from '@nestjs/graphql';
import { DummyResult } from '../result/dummy-result.model';
import { RawResult } from '../result/raw-result.model';
import { TableResult } from '../result/table-result.model';
import { Algorithm } from './algorithm.model';
export const ResultUnion = createUnionType({
name: 'ResultUnion',
types: () => [TableResult, DummyResult],
types: () => [TableResult, RawResult],
resolveType(value) {
if (value.headers) {
return TableResult;
}
if (value.listMax) {
return DummyResult;
return RawResult;
}
return null;
......
import { Field, ObjectType } from '@nestjs/graphql';
import { GraphQLJSONObject } from 'graphql-type-json';
import { Result } from './common/result.model';
@ObjectType()
export class DummyResult extends Result {
@Field()
name: string;
export class RawResult extends Result {
@Field(() => GraphQLJSONObject)
data: unknown;
@Field(() => [[String]])
data: string[][];
@Field(() => [String])
listMax: string[];
@Field(() => [String], { defaultValue: [] })
listMax?: string[];
}
......@@ -72,7 +72,7 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date
"""
scalar DateTime
union ResultUnion = TableResult | DummyResult
union ResultUnion = TableResult | RawResult
type TableResult {
groupBy: String
......@@ -81,13 +81,17 @@ type TableResult {
headers: [Header!]!
}
type DummyResult {
type RawResult {
groupBy: String
name: String!
data: [[String!]!]!
data: JSONObject!
listMax: [String!]!
}
"""
The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
"""
scalar JSONObject @specifiedBy(url: "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf")
type Query {
domains(ids: [String!] = []): [Domain!]!
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment