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

fix: Add datasets to groups and variables

parent 622229e2
No related branches found
No related tags found
No related merge requests found
...@@ -17,12 +17,8 @@ import { ...@@ -17,12 +17,8 @@ import {
} from 'src/engine/engine.interfaces'; } from 'src/engine/engine.interfaces';
import { Domain } from 'src/engine/models/domain.model'; import { Domain } from 'src/engine/models/domain.model';
import { Algorithm } from 'src/engine/models/experiment/algorithm.model'; import { Algorithm } from 'src/engine/models/experiment/algorithm.model';
import { import { Experiment } from 'src/engine/models/experiment/experiment.model';
Experiment,
PartialExperiment,
} from 'src/engine/models/experiment/experiment.model';
import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input'; import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
import { ExperimentEditInput } from 'src/engine/models/experiment/input/experiment-edit.input';
import { ListExperiments } from 'src/engine/models/experiment/list-experiments.model'; import { ListExperiments } from 'src/engine/models/experiment/list-experiments.model';
import { RawResult } from 'src/engine/models/result/raw-result.model'; import { RawResult } from 'src/engine/models/result/raw-result.model';
import { import {
...@@ -31,7 +27,9 @@ import { ...@@ -31,7 +27,9 @@ import {
} from 'src/engine/models/result/table-result.model'; } from 'src/engine/models/result/table-result.model';
import { User } from 'src/users/models/user.model'; import { User } from 'src/users/models/user.model';
import { import {
transformToDomains, dataToGroups,
dsGroup,
transformToDomain,
transformToHisto, transformToHisto,
transformToTable, transformToTable,
} from './transformations'; } from './transformations';
...@@ -188,7 +186,7 @@ export default class DataShieldService implements IEngineService { ...@@ -188,7 +186,7 @@ export default class DataShieldService implements IEngineService {
return expResult; return expResult;
} }
async listExperiments(page: number, name: string): Promise<ListExperiments> { async listExperiments(): Promise<ListExperiments> {
return { return {
totalExperiments: 0, totalExperiments: 0,
experiments: [], experiments: [],
...@@ -247,7 +245,11 @@ export default class DataShieldService implements IEngineService { ...@@ -247,7 +245,11 @@ export default class DataShieldService implements IEngineService {
}), }),
); );
return [transformToDomains.evaluate(response.data)]; const dsDomain = transformToDomain.evaluate(response.data);
const groups = response.data['groups'] as dsGroup[];
dataToGroups(dsDomain, groups);
return [dsDomain];
} }
async getActiveUser(req: Request): Promise<User> { async getActiveUser(req: Request): Promise<User> {
......
...@@ -2,29 +2,31 @@ ...@@ -2,29 +2,31 @@
// see : https://docs.jsonata.org/ // see : https://docs.jsonata.org/
import * as jsonata from 'jsonata'; import * as jsonata from 'jsonata';
import { Domain } from 'src/engine/models/domain.model';
import { Group } from 'src/engine/models/group.model';
export const transformToDomains = jsonata(` export const transformToDomain = jsonata(`
{ {
"id": "sophia", "id": "sophia",
"label": "Sophia",
"datasets": datasets.{ "datasets": datasets.{
"id": $.id[0], "id": $.id[0],
"label": $.label[0] "label": $.label[0]
}, },
"rootGroup": { "rootGroup": {
"id": rootGroup.id[0], "id": "root",
"label": rootGroup.label[0], "label": "Sophia",
"groups": rootGroup.groups "groups": $append(rootGroup.groups, $keys($.groups.variables))
}, },
"groups": groups.{ "groups": datasets.{
"id": $.id[0], "id": $.id[0],
"label": $.label[0], "label": $.label[0],
"variables": $.variables, "groups": [],
"groups": $.groups "datasets": $.id[0][]
}, }[],
"variables": $distinct(groups.variables).{ "variables": $distinct(groups.variables.($type($) = 'object' ? $.* : $)).{
"id": $, "id": $,
"label": $trim($replace($ & '', '.', ' ')), "label": $trim($replace($ & '', '.', ' '))
"type": "Number"
} }
} }
`); `);
...@@ -82,3 +84,41 @@ export const transformToTable = jsonata(` ...@@ -82,3 +84,41 @@ export const transformToTable = jsonata(`
export const transformToUser = jsonata(` export const transformToUser = jsonata(`
$ ~> |$|{'id': subjectId}, ['subjectId']| $ ~> |$|{'id': subjectId}, ['subjectId']|
`); `);
export type dsGroup = {
id: string[];
label: string[];
variables: Record<string, string[]> | string[];
groups?: string[];
};
export const dataToGroups = (dsDomain: Domain, groups: dsGroup[]) => {
groups.forEach((g) => {
if (Array.isArray(g.variables)) {
dsDomain.groups.push({
id: g.id[0],
label: g.label[0],
variables: g.variables,
});
return;
}
if (dsDomain.rootGroup.groups.includes(g.id[0])) {
dsDomain.rootGroup.groups = dsDomain.rootGroup.groups.filter(
(gId) => gId !== g.id[0],
);
}
return Object.entries(g.variables).map(([key, val]) => {
const id = `${g.id}-${key}`;
dsDomain.groups.find((g) => g.id === key).groups.push(id);
const group: Group = {
id,
variables: val,
groups: g['groups'] ? g['groups'].map((g) => `${g}-${key}`) : undefined,
label: `${g.label[0]} (${key})`,
};
dsDomain.groups.push(group);
});
});
};
...@@ -38,7 +38,7 @@ export interface IEngineService { ...@@ -38,7 +38,7 @@ export interface IEngineService {
req?: Request, req?: Request,
): Promise<Experiment>; ): Promise<Experiment>;
listExperiments( listExperiments?(
page: number, page: number,
name: string, name: string,
req?: Request, req?: Request,
...@@ -46,9 +46,9 @@ export interface IEngineService { ...@@ -46,9 +46,9 @@ export interface IEngineService {
getExperiment(id: string, req?: Request): Promise<Experiment>; getExperiment(id: string, req?: Request): Promise<Experiment>;
removeExperiment(id: string, req?: Request): Promise<PartialExperiment>; removeExperiment?(id: string, req?: Request): Promise<PartialExperiment>;
editExperient( editExperient?(
id: string, id: string,
expriment: ExperimentEditInput, expriment: ExperimentEditInput,
req?: Request, req?: Request,
......
...@@ -15,4 +15,10 @@ export class Group extends BaseModel { ...@@ -15,4 +15,10 @@ export class Group extends BaseModel {
nullable: true, nullable: true,
}) })
variables?: string[]; variables?: string[];
@Field(() => [String], {
description: 'List of datasets avalaible, set null if all datasets allowed',
nullable: true,
})
datasets?: string[];
} }
...@@ -16,4 +16,10 @@ export class Variable extends BaseModel { ...@@ -16,4 +16,10 @@ export class Variable extends BaseModel {
@Field(() => [Group], { nullable: true, defaultValue: [] }) @Field(() => [Group], { nullable: true, defaultValue: [] })
groups?: Group[]; groups?: Group[];
@Field(() => [String], {
description: 'List of datasets avalaible, set null if all datasets allowed',
nullable: true,
})
datasets?: string[];
} }
...@@ -45,6 +45,9 @@ type Group { ...@@ -45,6 +45,9 @@ type Group {
"""List of variable's ids""" """List of variable's ids"""
variables: [String!] variables: [String!]
"""List of datasets avalaible, set null if all datasets allowed"""
datasets: [String!]
} }
type Category { type Category {
...@@ -59,6 +62,9 @@ type Variable { ...@@ -59,6 +62,9 @@ type Variable {
description: String description: String
enumerations: [Category!] enumerations: [Category!]
groups: [Group!] groups: [Group!]
"""List of datasets avalaible, set null if all datasets allowed"""
datasets: [String!]
} }
type Domain { type 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