Skip to content

Commit 2715460

Browse files
committed
feat: add link and unlink use cases
1 parent 7f3e9eb commit 2715460

6 files changed

Lines changed: 119 additions & 1 deletion

File tree

docs/useCases.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ The different use cases currently available in the package are classified below,
4242
- [Publish a Dataset](#publish-a-dataset)
4343
- [Deaccession a Dataset](#deaccession-a-dataset)
4444
- [Delete a Draft Dataset](#delete-a-draft-dataset)
45+
- [Link a Dataset](#link-a-dataset)
46+
- [Unlink a Dataset](#unlink-a-dataset)
4547
- [Files](#Files)
4648
- [Files read use cases](#files-read-use-cases)
4749
- [Get a File](#get-a-file)
@@ -944,6 +946,48 @@ The `datasetId` parameter is a number for numeric identifiers or string for pers
944946

945947
If you try to delete a dataset without draft version, you will get a not found error.
946948

949+
#### Link a Dataset
950+
951+
Creates a link between a Dataset and a Collection.
952+
953+
##### Example call:
954+
955+
```typescript
956+
import { linkDataset } from '@iqss/dataverse-client-javascript'
957+
958+
/* ... */
959+
960+
const datasetId = 1
961+
const collectionIdOrAlias = 12345
962+
963+
linkDataset.execute(datasetId, collectionIdOrAlias)
964+
965+
/* ... */
966+
```
967+
968+
_See [use case](../src/datasets/domain/useCases/LinkDataset.ts) implementation_.
969+
970+
#### Unlink a Dataset
971+
972+
Removes a link between a Dataset and a Collection.
973+
974+
##### Example call:
975+
976+
```typescript
977+
import { unlinkDataset } from '@iqss/dataverse-client-javascript'
978+
979+
/* ... */
980+
981+
const datasetId = 1
982+
const collectionIdOrAlias = 12345
983+
984+
unlinkDataset.execute(datasetId, collectionIdOrAlias)
985+
986+
/* ... */
987+
```
988+
989+
_See [use case](../src/datasets/domain/useCases/UnlinkDataset.ts) implementation_.
990+
947991
#### Get Download Count of a Dataset
948992

949993
Total number of downloads requested for a dataset, given a dataset numeric identifier,

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,6 @@ export interface IDatasetsRepository {
6161
): Promise<DatasetDownloadCount>
6262
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
6363
deleteDatasetDraft(datasetId: number | string): Promise<void>
64+
linkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
65+
unlinkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
6466
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3+
4+
export class LinkDataset implements UseCase<void> {
5+
private datasetsRepository: IDatasetsRepository
6+
7+
constructor(datasetsRepository: IDatasetsRepository) {
8+
this.datasetsRepository = datasetsRepository
9+
}
10+
11+
/**
12+
* Creates a link between a Dataset and a Collection.
13+
*
14+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
15+
* @param {number | string} [collectionIdOrAlias] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
16+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
17+
*/
18+
async execute(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void> {
19+
return await this.datasetsRepository.linkDataset(datasetId, collectionIdOrAlias)
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3+
4+
export class UnlinkDataset implements UseCase<void> {
5+
private datasetsRepository: IDatasetsRepository
6+
7+
constructor(datasetsRepository: IDatasetsRepository) {
8+
this.datasetsRepository = datasetsRepository
9+
}
10+
11+
/**
12+
* Removes a link between a Dataset and a Collection.
13+
*
14+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
15+
* @param {number | string} [collectionIdOrAlias] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
16+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
17+
*/
18+
async execute(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void> {
19+
return await this.datasetsRepository.unlinkDataset(datasetId, collectionIdOrAlias)
20+
}
21+
}

src/datasets/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import { DeaccessionDataset } from './domain/useCases/DeaccessionDataset'
2020
import { GetDatasetDownloadCount } from './domain/useCases/GetDatasetDownloadCount'
2121
import { GetDatasetVersionsSummaries } from './domain/useCases/GetDatasetVersionsSummaries'
2222
import { DeleteDatasetDraft } from './domain/useCases/DeleteDatasetDraft'
23+
import { LinkDataset } from './domain/useCases/LinkDataset'
24+
import { UnlinkDataset } from './domain/useCases/UnlinkDataset'
2325

2426
const datasetsRepository = new DatasetsRepository()
2527

@@ -54,6 +56,8 @@ const deaccessionDataset = new DeaccessionDataset(datasetsRepository)
5456
const getDatasetDownloadCount = new GetDatasetDownloadCount(datasetsRepository)
5557
const getDatasetVersionsSummaries = new GetDatasetVersionsSummaries(datasetsRepository)
5658
const deleteDatasetDraft = new DeleteDatasetDraft(datasetsRepository)
59+
const linkDataset = new LinkDataset(datasetsRepository)
60+
const unlinkDataset = new UnlinkDataset(datasetsRepository)
5761

5862
export {
5963
getDataset,
@@ -71,7 +75,9 @@ export {
7175
deaccessionDataset,
7276
getDatasetDownloadCount,
7377
getDatasetVersionsSummaries,
74-
deleteDatasetDraft
78+
deleteDatasetDraft,
79+
linkDataset,
80+
unlinkDataset
7581
}
7682
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion'
7783
export { DatasetUserPermissions } from './domain/models/DatasetUserPermissions'

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,4 +287,28 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
287287
throw error
288288
})
289289
}
290+
291+
public async linkDataset(
292+
datasetId: number | string,
293+
collectionIdOrAlias: number | string
294+
): Promise<void> {
295+
return this.doPut(`/${this.datasetsResourceName}/${datasetId}/link/${collectionIdOrAlias}`, {})
296+
.then(() => undefined)
297+
.catch((error) => {
298+
throw error
299+
})
300+
}
301+
302+
public async unlinkDataset(
303+
datasetId: number | string,
304+
collectionIdOrAlias: number | string
305+
): Promise<void> {
306+
return this.doDelete(
307+
`/${this.datasetsResourceName}/${datasetId}/deleteLink/${collectionIdOrAlias}`
308+
)
309+
.then(() => undefined)
310+
.catch((error) => {
311+
throw error
312+
})
313+
}
290314
}

0 commit comments

Comments
 (0)