Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
tpluscode committed Jun 20, 2024
1 parent a919872 commit 73a3458
Show file tree
Hide file tree
Showing 24 changed files with 264 additions and 230 deletions.
4 changes: 2 additions & 2 deletions apis/core/lib/domain/column-mapping/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import { getDimensionMetaDataCollection } from '../queries/dimension-metadata.js
import * as TableQueries from '../queries/table.js'
import * as ColumnMappingQueries from '../queries/column-mapping.js'
import { findOrganization } from '../organization/query.js'
import { getTableForColumnMapping } from '../queries/table.js'
import { dimensionIsUsedByOtherMapping } from '../queries/column-mapping.js'

interface DeleteColumnMappingCommand {
resource: NamedNode
Expand All @@ -19,8 +21,6 @@ interface DeleteColumnMappingCommand {
export async function deleteColumnMapping({
resource,
store,
tableQueries: { getTableForColumnMapping } = TableQueries,
columnMappingQueries: { dimensionIsUsedByOtherMapping } = ColumnMappingQueries,
}: DeleteColumnMappingCommand): Promise<void> {
const columnMapping = await store.getResource<ColumnMapping>(resource, { allowMissing: true })
if (!columnMapping) return
Expand Down
8 changes: 1 addition & 7 deletions apis/core/lib/domain/column-mapping/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,23 @@ import type { Organization } from '@rdfine/schema'
import { Dictionary } from '@rdfine/prov'
import { ResourceStore } from '../../ResourceStore.js'
import { getDimensionMetaDataCollection } from '../queries/dimension-metadata.js'
import * as TableQueries from '../queries/table.js'
import { getTableForColumnMapping } from '../queries/table.js'
import * as id from '../identifiers.js'
import { findOrganization } from '../organization/query.js'
import { findMapping } from './lib/index.js'

interface UpdateColumnMappingCommand {
resource: GraphPointer
store: ResourceStore
tableQueries?: Pick<typeof TableQueries, 'getTableForColumnMapping'>
}

export async function updateLiteralColumnMapping({
resource,
store,
tableQueries = TableQueries,
}: UpdateColumnMappingCommand): Promise<GraphPointer> {
const { columnMapping, table } = await updateColumnMapping<LiteralColumnMapping>({
resource,
store,
tableQueries,
})

const columnId = resource.out(cc.sourceColumn).term!
Expand All @@ -63,12 +60,10 @@ export async function updateLiteralColumnMapping({
export async function updateReferenceColumnMapping({
resource,
store,
tableQueries = TableQueries,
}: UpdateColumnMappingCommand): Promise<GraphPointer> {
const { columnMapping, table } = await updateColumnMapping<ReferenceColumnMapping>({
resource,
store,
tableQueries,
})

// Update referencedTable
Expand Down Expand Up @@ -106,7 +101,6 @@ export async function updateReferenceColumnMapping({
async function updateColumnMapping<T extends ColumnMapping>({
resource,
store,
tableQueries: { getTableForColumnMapping } = TableQueries,
}: UpdateColumnMappingCommand): Promise<{ columnMapping: T; table: Table }> {
const columnMapping = await store.getResource<T>(resource.term)

Expand Down
4 changes: 2 additions & 2 deletions apis/core/lib/domain/dimension/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { NamedNode, Quad, Term } from '@rdfjs/types'
import type { GraphPointer } from 'clownface'
import $rdf from '@cube-creator/env'
import { DimensionMetadataCollection, Project } from '@cube-creator/model'
import { createNoMeasureDimensionError, Error } from '@cube-creator/model/DimensionMetadata'
import { noMeasureDimensionError, Error } from '@cube-creator/model/DimensionMetadata'
import { prov, rdf, schema } from '@tpluscode/rdf-ns-builders'
import { cc } from '@cube-creator/core/namespace'
import { ResourceStore } from '../../ResourceStore.js'
Expand Down Expand Up @@ -59,7 +59,7 @@ export async function update({
}

if (!metadata.hasPart.some(dim => dim.isMeasureDimension)) {
metadata.addError?.(createNoMeasureDimensionError($rdf))
metadata.addError?.($rdf.rdfine.schema.Thing(noMeasureDimensionError))
} else {
metadata.removeError?.(Error.MissingMeasureDimension)
}
Expand Down
4 changes: 2 additions & 2 deletions apis/core/lib/domain/queries/dimension-metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ export async function getDimensionMetaDataCollection(csvMapping: Term, client =
`
.execute(client)
if (results.length < 1) {
throw new Error(`No DimensionMetadata for table ${csvMapping} found`)
throw new Error(`No DimensionMetadata for table ${csvMapping.value} found`)
}
if (results.length > 1) {
throw new Error(`More than one DimensionMetadata for table ${csvMapping} found`)
throw new Error(`More than one DimensionMetadata for table ${csvMapping.value} found`)
}
return results[0].dimensionMetadata
}
Expand Down
11 changes: 1 addition & 10 deletions apis/core/lib/domain/table/delete.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
import type { NamedNode } from '@rdfjs/types'
import { cc } from '@cube-creator/core/namespace'
import { ResourceStore } from '../../ResourceStore.js'
import * as TableQueries from '../queries/table.js'
import * as ColumnMappingQueries from '../queries/column-mapping.js'
import { deleteColumnMapping } from '../column-mapping/delete.js'
import { getReferencingMappingsForTable } from '../queries/column-mapping.js'

interface DeleteTableCommand {
resource: NamedNode
store: ResourceStore
tableQueries?: Pick<typeof TableQueries, 'getTableForColumnMapping'>
columnMappingQueries?: Pick<typeof ColumnMappingQueries, 'dimensionIsUsedByOtherMapping'| 'getReferencingMappingsForTable'>
}

export async function deleteTable({
resource: tableTerm,
store,
tableQueries: { getTableForColumnMapping } = TableQueries,
columnMappingQueries: { dimensionIsUsedByOtherMapping, getReferencingMappingsForTable } = ColumnMappingQueries,
}: DeleteTableCommand): Promise<void> {
if (tableTerm.termType !== 'NamedNode') return

Expand All @@ -30,8 +25,6 @@ export async function deleteTable({
await deleteColumnMapping({
resource: columnMapping,
store,
tableQueries: { getTableForColumnMapping },
columnMappingQueries: { dimensionIsUsedByOtherMapping },
})
}
}
Expand All @@ -43,8 +36,6 @@ export async function deleteTable({
await deleteColumnMapping({
resource: columnMapping,
store,
tableQueries: { getTableForColumnMapping },
columnMappingQueries: { dimensionIsUsedByOtherMapping },
})
}
}
Expand Down
7 changes: 4 additions & 3 deletions apis/core/test/domain/column-mapping/create.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,17 @@ describe('domain/column-mapping/create', () => {
])

;({ createColumnMapping } = await esmock('../../../lib/domain/column-mapping/create.js', {
'../../../lib/domain/queries/dimension-metadata.js': {
getDimensionMetaDataCollection: async () => dimensionMetadata.term,
},
}, {
'../../../lib/domain/organization/query.js': {
findOrganization: async () =>
({
projectId: project.id,
organizationId: organization.id,
}),
},
'../../../lib/domain/queries/dimension-metadata.js': {
getDimensionMetaDataCollection: async () => dimensionMetadata.term,
},
}))
})

Expand Down
66 changes: 31 additions & 35 deletions apis/core/test/domain/column-mapping/delete.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,24 @@ import { cc } from '@cube-creator/core/namespace'
import { Dataset as DatasetExt } from '@zazuko/env/lib/Dataset.js'
import { ColumnMapping } from '@cube-creator/model'
import { namedNode } from '@cube-creator/testing/clownface'
import esmock from 'esmock'
import { TestResourceStore } from '../../support/TestResourceStore.js'
import * as DimensionMetadataQueries from '../../../lib/domain/queries/dimension-metadata.js'
import type * as TableQueries from '../../../lib/domain/queries/table.js'
import type * as ColumnMappingQueries from '../../../lib/domain/queries/column-mapping.js'
import '../../../lib/domain/index.js'
import { deleteColumnMapping } from '../../../lib/domain/column-mapping/delete.js'
import * as orgQueries from '../../../lib/domain/organization/query.js'

describe('domain/column-mapping/delete', () => {
let store: TestResourceStore
const getLinkedTablesForSource = sinon.stub()
const getTablesForMapping = sinon.stub()
let tableQueries: typeof TableQueries
let getTableForColumnMapping: sinon.SinonStub
let columnMappingQueries: typeof ColumnMappingQueries
let dimensionIsUsedByOtherMapping: sinon.SinonStub
let dimensionMetadataCollection: GraphPointer<NamedNode, DatasetExt>
let columnMapping: GraphPointer<NamedNode, DatasetExt>
let columnMappingObservation: GraphPointer<NamedNode, DatasetExt>
let observationTable: GraphPointer<NamedNode, DatasetExt>
let dimensionMapping: GraphPointer<NamedNode, DatasetExt>

beforeEach(() => {
sinon.restore()
let deleteColumnMapping: typeof import('../../../lib/domain/column-mapping/delete.js').deleteColumnMapping

beforeEach(async () => {
const organization = $rdf.rdfine.cc.Organization(namedNode('org'), {
namespace: $rdf.namedNode('http://example.com/'),
})
Expand Down Expand Up @@ -127,29 +120,32 @@ describe('domain/column-mapping/delete', () => {
dimensionMapping,
])

sinon.restore()
sinon.stub(DimensionMetadataQueries, 'getDimensionMetaDataCollection').resolves(dimensionMetadataCollection.term)

getTableForColumnMapping = sinon.stub().resolves(observationTable.term.value)
tableQueries = {
getLinkedTablesForSource,
getTablesForMapping,
getTableForColumnMapping,
getTableReferences: sinon.stub(),
getCubeTable: sinon.stub(),
}

const getDimensionMetaDataCollection = sinon.stub().resolves(dimensionMetadataCollection.term)
const getTableForColumnMapping = sinon.stub().resolves(observationTable.term.value)
dimensionIsUsedByOtherMapping = sinon.stub().resolves(false)
const getReferencingMappingsForTable = sinon.stub().returns([])
columnMappingQueries = {
dimensionIsUsedByOtherMapping,
getReferencingMappingsForTable,
}

sinon.stub(orgQueries, 'findOrganization').resolves({
projectId: project.id,
organizationId: organization.id,
})

;({ deleteColumnMapping } = await esmock('../../../lib/domain/column-mapping/delete.js', {
'../../../lib/domain/queries/table.js': {
getLinkedTablesForSource,
getTablesForMapping,
getTableForColumnMapping,
getTableReferences: sinon.stub(),
getCubeTable: sinon.stub(),
},
'../../../lib/domain/queries/dimension-metadata.js': {
getDimensionMetaDataCollection,
},
'../../../lib/domain/queries/column-mapping.js': {
dimensionIsUsedByOtherMapping,
getReferencingMappingsForTable: sinon.stub().returns([]),
},
'../../../lib/domain/organization/query.js': {
findOrganization: sinon.stub().resolves({
projectId: project.id,
organizationId: organization.id,
}),
},
}))
})

it('deletes a column mapping and its dimensions', async () => {
Expand All @@ -158,7 +154,7 @@ describe('domain/column-mapping/delete', () => {
const dimensionsCount = dimensionMetadataCollection.out(schema.hasPart).terms.length
const columnMappingsCount = observationTable.out(cc.columnMapping).terms.length

await deleteColumnMapping({ resource: resourceId, store, tableQueries, columnMappingQueries })
await deleteColumnMapping({ resource: resourceId, store })
await store.save()

const columnMapping = await store.getResource<ColumnMapping>(resourceId, { allowMissing: true })
Expand All @@ -178,7 +174,7 @@ describe('domain/column-mapping/delete', () => {
const columnMappingsCount = observationTable.out(cc.columnMapping).terms.length
const dimensionMetadataCount = dimensionMetadataCollection.node($rdf.namedNode('myDimension')).out().values.length

await deleteColumnMapping({ resource: resourceId, store, tableQueries, columnMappingQueries })
await deleteColumnMapping({ resource: resourceId, store })
await store.save()

const columnMapping = await store.getResource<ColumnMapping>(resourceId, { allowMissing: true })
Expand All @@ -194,7 +190,7 @@ describe('domain/column-mapping/delete', () => {
const resourceId = $rdf.namedNode('columnMappingObservation')

// when
await deleteColumnMapping({ resource: resourceId, store, tableQueries, columnMappingQueries })
await deleteColumnMapping({ resource: resourceId, store })
await store.save()

// then
Expand Down
Loading

0 comments on commit 73a3458

Please sign in to comment.