Skip to content

Commit e4c0880

Browse files
committed
feat: update linkDataset and unlinkDataset methods to accept string or number for dataset and collection identifiers
1 parent 5190e6a commit e4c0880

File tree

5 files changed

+66
-14
lines changed

5 files changed

+66
-14
lines changed

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ export interface IDatasetsRepository {
6565
): Promise<DatasetDownloadCount>
6666
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
6767
deleteDatasetDraft(datasetId: number | string): Promise<void>
68-
linkDataset(datasetId: number, collectionAlias: string): Promise<void>
69-
unlinkDataset(datasetId: number, collectionAlias: string): Promise<void>
68+
linkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
69+
unlinkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
7070
getDatasetLinkedCollections(datasetId: number | string): Promise<DatasetLinkedCollection[]>
7171
getDatasetAvailableCategories(datasetId: number | string): Promise<string[]>
7272
getDatasetCitationInOtherFormats(

src/datasets/domain/useCases/LinkDataset.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ export class LinkDataset implements UseCase<void> {
1111
/**
1212
* Creates a link between a Dataset and a Collection.
1313
*
14-
* @param {number} [datasetId] - The dataset id.
15-
* @param {string} [collectionAlias] - The collection alias.
14+
* @param {number | string} [datasetId] - The dataset id (numeric) or persistent identifier string.
15+
* @param {number | string} [collectionIdOrAlias] - The collection identifier (numeric id) or alias.
1616
* @returns {Promise<void>} - This method does not return anything upon successful completion.
1717
*/
18-
async execute(datasetId: number, collectionAlias: string): Promise<void> {
19-
return await this.datasetsRepository.linkDataset(datasetId, collectionAlias)
18+
async execute(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void> {
19+
return await this.datasetsRepository.linkDataset(datasetId, collectionIdOrAlias)
2020
}
2121
}

src/datasets/domain/useCases/UnlinkDataset.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ export class UnlinkDataset implements UseCase<void> {
1111
/**
1212
* Removes a link between a Dataset and a Collection.
1313
*
14-
* @param {number} [datasetId] - The dataset id.
15-
* @param {string} [collectionAlias] - The collection alias.
14+
* @param {number | string} [datasetId] - The dataset id (numeric) or persistent identifier string.
15+
* @param {number | string} [collectionIdOrAlias] - The collection identifier (numeric id) or alias.
1616
* @returns {Promise<void>} - This method does not return anything upon successful completion.
1717
*/
18-
async execute(datasetId: number, collectionAlias: string): Promise<void> {
19-
return await this.datasetsRepository.unlinkDataset(datasetId, collectionAlias)
18+
async execute(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void> {
19+
return await this.datasetsRepository.unlinkDataset(datasetId, collectionIdOrAlias)
2020
}
2121
}

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,16 +323,32 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
323323
})
324324
}
325325

326-
public async linkDataset(datasetId: number, collectionAlias: string): Promise<void> {
327-
return this.doPut(`/${this.datasetsResourceName}/${datasetId}/link/${collectionAlias}`, {})
326+
public async linkDataset(
327+
datasetId: number | string,
328+
collectionIdOrAlias: number | string
329+
): Promise<void> {
330+
const endpoint = this.buildApiEndpoint(
331+
this.datasetsResourceName,
332+
`link/${collectionIdOrAlias}`,
333+
datasetId
334+
)
335+
return this.doPut(endpoint, {})
328336
.then(() => undefined)
329337
.catch((error) => {
330338
throw error
331339
})
332340
}
333341

334-
public async unlinkDataset(datasetId: number, collectionAlias: string): Promise<void> {
335-
return this.doDelete(`/${this.datasetsResourceName}/${datasetId}/deleteLink/${collectionAlias}`)
342+
public async unlinkDataset(
343+
datasetId: number | string,
344+
collectionIdOrAlias: number | string
345+
): Promise<void> {
346+
const endpoint = this.buildApiEndpoint(
347+
this.datasetsResourceName,
348+
`deleteLink/${collectionIdOrAlias}`,
349+
datasetId
350+
)
351+
return this.doDelete(endpoint)
336352
.then(() => undefined)
337353
.catch((error) => {
338354
throw error

test/integration/datasets/DatasetsRepository.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,21 @@ describe('DatasetsRepository', () => {
15331533
sut.linkDataset(testDatasetIds.numericId, 'nonExistentCollectionAlias')
15341534
).rejects.toThrow()
15351535
})
1536+
1537+
test('should link a dataset to another collection using persistent id', async () => {
1538+
const persistentCollectionAlias = 'testLinkDatasetCollectionPersistent'
1539+
await createCollectionViaApi(persistentCollectionAlias)
1540+
1541+
const actual = await sut.linkDataset(testDatasetIds.persistentId, persistentCollectionAlias)
1542+
1543+
expect(actual).toBeUndefined()
1544+
1545+
const linkedCollections = await sut.getDatasetLinkedCollections(testDatasetIds.numericId)
1546+
const aliases = linkedCollections.map((c) => c.alias)
1547+
expect(aliases).toContain(persistentCollectionAlias)
1548+
1549+
await deleteCollectionViaApi(persistentCollectionAlias)
1550+
})
15361551
})
15371552

15381553
describe('unlinkDataset', () => {
@@ -1578,6 +1593,27 @@ describe('DatasetsRepository', () => {
15781593
sut.unlinkDataset(testDatasetIds.numericId, testCollectionAlias)
15791594
).rejects.toThrow()
15801595
})
1596+
1597+
test('should unlink a dataset from a collection using persistent id', async () => {
1598+
const persistentCollectionAlias = 'testUnlinkDatasetCollectionPersistent'
1599+
await createCollectionViaApi(persistentCollectionAlias)
1600+
1601+
await sut.linkDataset(testDatasetIds.persistentId, persistentCollectionAlias)
1602+
const linkedCollections = await sut.getDatasetLinkedCollections(testDatasetIds.numericId)
1603+
const aliases = linkedCollections.map((c) => c.alias)
1604+
expect(aliases).toContain(persistentCollectionAlias)
1605+
1606+
const actual = await sut.unlinkDataset(testDatasetIds.persistentId, persistentCollectionAlias)
1607+
1608+
expect(actual).toBeUndefined()
1609+
const updatedLinkedCollections = await sut.getDatasetLinkedCollections(
1610+
testDatasetIds.numericId
1611+
)
1612+
const updatedAliases = updatedLinkedCollections.map((c) => c.alias)
1613+
expect(updatedAliases).not.toContain(persistentCollectionAlias)
1614+
1615+
await deleteCollectionViaApi(persistentCollectionAlias)
1616+
})
15811617
})
15821618

15831619
describe('getDatasetLinkedCollections', () => {

0 commit comments

Comments
 (0)