From e192ad8bdca0ed7cf0f94829cde9a876eb2a912e Mon Sep 17 00:00:00 2001 From: Steve Reis <stevereis93@gmail.com> Date: Thu, 30 Sep 2021 12:58:41 +0200 Subject: [PATCH] Refactor metadata on tableresult by header --- .../connectors/exareme/transformations.ts | 68 +++++++++---------- .../{metadata.model.ts => header.model.ts} | 2 +- .../models/result/table-result.model.ts | 6 +- api/src/schema.gql | 4 +- 4 files changed, 39 insertions(+), 41 deletions(-) rename api/src/engine/models/result/common/{metadata.model.ts => header.model.ts} (83%) diff --git a/api/src/engine/connectors/exareme/transformations.ts b/api/src/engine/connectors/exareme/transformations.ts index 853dec6..936052e 100644 --- a/api/src/engine/connectors/exareme/transformations.ts +++ b/api/src/engine/connectors/exareme/transformations.ts @@ -1,45 +1,43 @@ // This file contains all transformation queries for JSONata // see : https://docs.jsonata.org/ -import * as jsonata from 'jsonata'; // old import style needed because of 'export = jsonata' +import * as jsonata from 'jsonata'; // old import style needed due to 'export = jsonata' export const transientToTable = jsonata(` ( - $e := function($x) {( - ($x != null) ? $x : '' - )}; + $e := function($x, $r) {($x != null) ? $x : ($r ? $r : '')}; - $fn := function($o, $prefix) { - $each($o, function($v, $k) {( - $name := $join([$prefix,$k], '/'); - $type($v) = 'object' ? $fn($v, $name): { - $name: $v - } - )}) ~> $merge() - }; + $fn := function($o, $prefix) { + $type($o) = 'object' ? + $each($o, function($v, $k) {( + $type($v) = 'object' ? { $k: $v.count & ' (' & $v.percentage & '%)' } : { + $k: $v + } + )}) ~> $merge() + : {} + }; - result.data.[ - $.single.*@$p#$i.{ - 'groupBy' : 'single', - 'name': $keys(%)[$i], - 'metadatas': $append("", $keys(*)).{ - 'name': $, - 'type': 'string' - }, - 'data' : [ - [$keys(%)[$i], $p.*.($e(num_total))], - ['Datapoints', $p.*.($e(num_datapoints))], - ['Nulls', $p.*.($e(num_nulls))], - $p.*.data.($fn($)) ~> $reduce(function($a, $b) { - $each($a, function($v, $k) {( - $val := $lookup($b,$k); - { - $k : [$v, ($val != null) ? $val : ''] - } - )}) ~> $merge() - }) ~> $each(function($v, $k) {$append($k,$v)}) - ] - } - ] + result.data.[ + $.single.*@$p#$i.{ + 'groupBy' : 'single', + 'name': $keys(%)[$i], + 'metadatas': $append("", $keys(*)).{ + 'name': $, + 'type': 'string' + }, + 'data' : [ + [$keys(%)[$i], $p.*.($e(num_total))], + ['Datapoints', $p.*.($e(num_datapoints))], + ['Nulls', $p.*.($e(num_nulls))], + $p.*.data.($fn($)) ~> $reduce(function($a, $b) { + $each($a, function($v, $k) {( + { + $k : [$v, $e($lookup($b,$k), "No data")] + } + )}) ~> $merge() + }) ~> $each(function($v, $k) {$append($k,$v)}) + ] + } + ] ) `); diff --git a/api/src/engine/models/result/common/metadata.model.ts b/api/src/engine/models/result/common/header.model.ts similarity index 83% rename from api/src/engine/models/result/common/metadata.model.ts rename to api/src/engine/models/result/common/header.model.ts index 0c35ddd..2784498 100644 --- a/api/src/engine/models/result/common/metadata.model.ts +++ b/api/src/engine/models/result/common/header.model.ts @@ -1,7 +1,7 @@ import { Field, ObjectType } from '@nestjs/graphql'; @ObjectType() -export class MetaData { +export class Header { @Field() name: string; diff --git a/api/src/engine/models/result/table-result.model.ts b/api/src/engine/models/result/table-result.model.ts index aa732d7..002d59c 100644 --- a/api/src/engine/models/result/table-result.model.ts +++ b/api/src/engine/models/result/table-result.model.ts @@ -1,5 +1,5 @@ import { Field, ObjectType } from '@nestjs/graphql'; -import { MetaData } from './common/metadata.model'; +import { Header } from './common/header.model'; import { Result } from './common/result.model'; @ObjectType() @@ -10,6 +10,6 @@ export class TableResult extends Result { @Field(() => [[String]]) data: string[][]; - @Field(() => [MetaData]) - metadatas: MetaData[]; + @Field(() => [Header]) + headers: Header[]; } diff --git a/api/src/schema.gql b/api/src/schema.gql index f51b333..c2ebe06 100644 --- a/api/src/schema.gql +++ b/api/src/schema.gql @@ -34,7 +34,7 @@ type Domain { rootGroup: Group! } -type MetaData { +type Header { name: String! type: String! } @@ -59,7 +59,7 @@ type TableResult { groupBy: String name: String! data: [[String!]!]! - metadatas: [MetaData!]! + headers: [Header!]! } type DummyResult { -- GitLab