Skip to content

Commit 2434086

Browse files
committed
feat: GetDatasetLinkedCollections use case
1 parent df0ffa8 commit 2434086

File tree

7 files changed

+81
-2
lines changed

7 files changed

+81
-2
lines changed

docs/useCases.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ The different use cases currently available in the package are classified below,
3636
- [Get Differences between Two Dataset Versions](#get-differences-between-two-dataset-versions)
3737
- [List All Datasets](#list-all-datasets)
3838
- [Get Dataset Versions Summaries](#get-dataset-versions-summaries)
39+
- [Get Dataset Linked Collections](#get-dataset-linked-collections)
3940
- [Datasets write use cases](#datasets-write-use-cases)
4041
- [Create a Dataset](#create-a-dataset)
4142
- [Update a Dataset](#update-a-dataset)
@@ -737,6 +738,30 @@ _See [use case](../src/datasets/domain/useCases/GetDatasetVersionsSummaries.ts)
737738

738739
The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
739740

741+
#### Get Dataset Linked Collections
742+
743+
Returns an array of [DatasetLinkedCollection](../src/datasets/domain/models/DatasetLinkedCollection.ts) that contains the collections linked to a dataset.
744+
745+
##### Example call:
746+
747+
```typescript
748+
import { getDatasetLinkedCollections } from '@iqss/dataverse-client-javascript'
749+
750+
/* ... */
751+
752+
const datasetId = 'doi:10.77777/FK2/AAAAAA'
753+
754+
getDatasetLinkedCollections
755+
.execute(datasetId)
756+
.then((datasetLinkedCollections: DatasetLinkedCollection[]) => {
757+
/* ... */
758+
})
759+
760+
/* ... */
761+
```
762+
763+
_See [use case](../src/datasets/domain/useCases/GetDatasetLinkedCollections.ts) implementation_.
764+
740765
### Datasets Write Use Cases
741766

742767
#### Create a Dataset
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface DatasetLinkedCollection {
2+
id: number
3+
alias: string
4+
displayName: string
5+
}
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 { DatasetLinkedCollection } from '../models/DatasetLinkedCollection'
3+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
4+
5+
export class GetDatasetLinkedCollections implements UseCase<DatasetLinkedCollection[]> {
6+
private datasetsRepository: IDatasetsRepository
7+
8+
constructor(datasetsRepository: IDatasetsRepository) {
9+
this.datasetsRepository = datasetsRepository
10+
}
11+
12+
/**
13+
* Returns a list of collections linked to a dataset.
14+
*
15+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
16+
* @returns {Promise<DatasetLinkedCollection[]>}
17+
*/
18+
async execute(datasetId: number | string): Promise<DatasetLinkedCollection[]> {
19+
return await this.datasetsRepository.getDatasetLinkedCollections(datasetId)
20+
}
21+
}

src/datasets/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { GetDatasetVersionsSummaries } from './domain/useCases/GetDatasetVersion
2222
import { DeleteDatasetDraft } from './domain/useCases/DeleteDatasetDraft'
2323
import { LinkDataset } from './domain/useCases/LinkDataset'
2424
import { UnlinkDataset } from './domain/useCases/UnlinkDataset'
25+
import { GetDatasetLinkedCollections } from './domain/useCases/GetDatasetLinkedCollections'
2526

2627
const datasetsRepository = new DatasetsRepository()
2728

@@ -58,6 +59,7 @@ const getDatasetVersionsSummaries = new GetDatasetVersionsSummaries(datasetsRepo
5859
const deleteDatasetDraft = new DeleteDatasetDraft(datasetsRepository)
5960
const linkDataset = new LinkDataset(datasetsRepository)
6061
const unlinkDataset = new UnlinkDataset(datasetsRepository)
62+
const getDatasetLinkedCollections = new GetDatasetLinkedCollections(datasetsRepository)
6163

6264
export {
6365
getDataset,
@@ -77,7 +79,8 @@ export {
7779
getDatasetVersionsSummaries,
7880
deleteDatasetDraft,
7981
linkDataset,
80-
unlinkDataset
82+
unlinkDataset,
83+
getDatasetLinkedCollections
8184
}
8285
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion'
8386
export { DatasetUserPermissions } from './domain/models/DatasetUserPermissions'
@@ -111,3 +114,4 @@ export {
111114
DatasetVersionSummaryInfo,
112115
DatasetVersionSummaryStringValues
113116
} from './domain/models/DatasetVersionSummaryInfo'
117+
export { DatasetLinkedCollection } from './domain/models/DatasetLinkedCollection'

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { transformDatasetVersionDiffResponseToDatasetVersionDiff } from './trans
2121
import { DatasetDownloadCount } from '../../domain/models/DatasetDownloadCount'
2222
import { DatasetVersionSummaryInfo } from '../../domain/models/DatasetVersionSummaryInfo'
2323
import { DatasetLinkedCollection } from '../../domain/models/DatasetLinkedCollection'
24+
import { transformDatasetLinkedCollectionsResponseToDatasetLinkedCollection } from './transformers/datasetLinkedCollectionsTransformers'
2425

2526
export interface GetAllDatasetPreviewsQueryParams {
2627
per_page?: number
@@ -309,7 +310,9 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
309310
datasetId: number | string
310311
): Promise<DatasetLinkedCollection[]> {
311312
return this.doGet(this.buildApiEndpoint(this.datasetsResourceName, 'links', datasetId), true)
312-
.then((response) => response.data.data)
313+
.then((response) =>
314+
transformDatasetLinkedCollectionsResponseToDatasetLinkedCollection(response.data.data)
315+
)
313316
.catch((error) => {
314317
throw error
315318
})
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export interface DatasetLinkedCollectionsPayload {
2+
id: number
3+
identifier: string
4+
'linked-dataverses': {
5+
id: number
6+
alias: string
7+
displayName: string
8+
}[]
9+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { DatasetLinkedCollection } from '../../../domain/models/DatasetLinkedCollection'
2+
import { DatasetLinkedCollectionsPayload } from './DatasetLinkedCollectionsPayload'
3+
4+
export const transformDatasetLinkedCollectionsResponseToDatasetLinkedCollection = (
5+
payload: DatasetLinkedCollectionsPayload
6+
): DatasetLinkedCollection[] => {
7+
return payload['linked-dataverses'].map((linkedDataverse) => ({
8+
id: linkedDataverse.id,
9+
alias: linkedDataverse.alias,
10+
displayName: linkedDataverse.displayName
11+
}))
12+
}

0 commit comments

Comments
 (0)