diff --git a/apis/shared-dimensions/lib/domain/hierarchies.ts b/apis/shared-dimensions/lib/domain/hierarchies.ts index 710cc568b..af73d2126 100644 --- a/apis/shared-dimensions/lib/domain/hierarchies.ts +++ b/apis/shared-dimensions/lib/domain/hierarchies.ts @@ -1,4 +1,4 @@ -import type { NamedNode } from '@rdfjs/types' +import type { NamedNode, Quad } from '@rdfjs/types' import { CONSTRUCT, SELECT } from '@tpluscode/sparql-builder' import { md, meta } from '@cube-creator/core/namespace' import clownface, { GraphPointer } from 'clownface' @@ -7,9 +7,11 @@ import httpError from 'http-errors' import $rdf from 'rdf-ext' import slugify from 'slugify' import { DomainError } from '@cube-creator/api-errors' +import { ParsingClient } from 'sparql-http-client/ParsingClient' import { SharedDimensionsStore } from '../store' import env from '../env' import { textSearch } from '../query' +import { CollectionData } from '../handlers/collection' import { newId, replace } from './resource' interface GetHierarchies { @@ -18,7 +20,7 @@ interface GetHierarchies { offset: number } -export function getHierarchies({ freetextQuery, limit, offset }: GetHierarchies) { +export async function getHierarchies({ freetextQuery, limit, offset }: GetHierarchies, client: ParsingClient): Promise>> { const hierarchy = $rdf.variable('hierarchy') const name = $rdf.variable('name') @@ -35,10 +37,11 @@ export function getHierarchies({ freetextQuery, limit, offset }: GetHierarchies) .ORDER().BY(name) } - return CONSTRUCT` + return { + members: await CONSTRUCT` ?proxyUrl ?p ?o . ` - .WHERE` + .WHERE` { ${select} } @@ -46,7 +49,9 @@ export function getHierarchies({ freetextQuery, limit, offset }: GetHierarchies) ${hierarchy} ?p ?o . BIND(IRI(CONCAT("${env.MANAGED_DIMENSIONS_API_BASE}", "dimension/_hierarchy/proxy?id=", ENCODE_FOR_URI(STR(${hierarchy})))) AS ?proxyUrl) - ` + `.execute(client.query), + totalItems: 0, + } } interface CreateHierarchy { diff --git a/apis/shared-dimensions/lib/handlers/hierarchies.ts b/apis/shared-dimensions/lib/handlers/hierarchies.ts index b689c8ad7..ec5ddb539 100644 --- a/apis/shared-dimensions/lib/handlers/hierarchies.ts +++ b/apis/shared-dimensions/lib/handlers/hierarchies.ts @@ -27,7 +27,7 @@ export const get = asyncMiddleware(async (req, res, next) => { offset, } const collection = await getCollection({ - memberQuads: await getHierarchies(queryParams).execute(parsingClient.query), + data: await getHierarchies(queryParams, parsingClient), collectionType: md.Hierarchies, memberType: md.Hierarchy, collection: req.hydra.resource.term, diff --git a/apis/shared-dimensions/lib/handlers/hierarchy.ts b/apis/shared-dimensions/lib/handlers/hierarchy.ts index 9605716d4..3e8d8d555 100644 --- a/apis/shared-dimensions/lib/handlers/hierarchy.ts +++ b/apis/shared-dimensions/lib/handlers/hierarchy.ts @@ -56,7 +56,7 @@ export const getExternal = asyncMiddleware(async (req, res) => { }) const hierarchy = clownface({ - dataset: $rdf.dataset(await query.execute(parsingClient)), + dataset: $rdf.dataset(await parsingClient.query.construct(query)), }).namedNode(url) ensureEndpoint(hierarchy) diff --git a/apis/shared-dimensions/test/lib/domain/managed-dimensions.test.ts b/apis/shared-dimensions/test/lib/domain/managed-dimensions.test.ts index d1c9c6b62..669aae75e 100644 --- a/apis/shared-dimensions/test/lib/domain/managed-dimensions.test.ts +++ b/apis/shared-dimensions/test/lib/domain/managed-dimensions.test.ts @@ -13,9 +13,12 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR describe('getSharedDimensions', () => { it('returns from all graphs', async () => { + // given + const collectionData = await getSharedDimensions(mdClients.streamClient) + // when const dataset = $rdf.dataset([ - ...await getSharedDimensions(mdClients.streamClient), + ...collectionData.members, ]) // then @@ -28,11 +31,14 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR }) it('returns filtered by name', async () => { + // given + const collectionData = await getSharedDimensions(mdClients.streamClient, { + freetextQuery: 'colors', + }) + // when const dataset = $rdf.dataset([ - ...await getSharedDimensions(mdClients.streamClient, { - freetextQuery: 'colors', - }), + ...collectionData.members, ]) // then @@ -51,10 +57,11 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR sharedDimensions: [$rdf.namedNode('http://example.com/dimension/colors')], freetextQuery: undefined, } + const collectionData = await getSharedTerms(search, mdClients.streamClient) // when const dataset = await $rdf.dataset() - .import(await getSharedTerms(search, mdClients.streamClient)) + .import(collectionData.members) // then expect(dataset.match(null, rdf.type, schema.DefinedTerm)) @@ -82,10 +89,11 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR sharedDimensions: [$rdf.namedNode('https://ld.admin.ch/cube/dimension/technologies')], freetextQuery: 'sparql', } + const collectionData = await getSharedTerms(search, mdClients.streamClient) // when const dataset = await $rdf.dataset() - .import(await getSharedTerms(search, mdClients.streamClient)) + .import(collectionData.members) // then expect(dataset.match(null, rdf.type, schema.DefinedTerm)) @@ -118,10 +126,11 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR freetextQuery: undefined, limit: 1, } + const collectionData = await getSharedTerms(search, mdClients.streamClient) // when const dataset = await $rdf.dataset() - .import(await getSharedTerms(search, mdClients.streamClient)) + .import(collectionData.members) // then expect(dataset.match(null, rdf.type, schema.DefinedTerm)) @@ -134,9 +143,11 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR sharedDimensions: [$rdf.namedNode('http://example.com/dimension/colors')], freetextQuery: 'r', } + const collectionData = await getSharedTerms(search, mdClients.streamClient) + // when const dataset = await $rdf.dataset() - .import(await getSharedTerms(search, mdClients.streamClient)) + .import(collectionData.members) // then const [term, ...more] = dataset.match(null, rdf.type, schema.DefinedTerm) @@ -151,9 +162,11 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR freetextQuery: undefined, validThrough: new Date(Date.parse('2021-04-15')), } + const collectionData = await getSharedTerms(search, mdClients.streamClient) + // when const dataset = await $rdf.dataset() - .import(await getSharedTerms(search, mdClients.streamClient)) + .import(collectionData.members) // then const terms = [...dataset.match(null, rdf.type, schema.DefinedTerm)].map(({ subject }) => subject)