Skip to content

Commit 2f24d32

Browse files
committed
add GetCollectionLinks use case
1 parent ed2ebf3 commit 2f24d32

File tree

12 files changed

+127
-4
lines changed

12 files changed

+127
-4
lines changed

.DS_Store

0 Bytes
Binary file not shown.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { CollectionSummary } from './CollectionSummary'
2+
import { DatasetSummary } from '../../../datasets/domain/models/DatasetSummary'
3+
4+
export interface CollectionLinks {
5+
linkedCollections: CollectionSummary[]
6+
collectionsLinkingToThis: CollectionSummary[]
7+
linkedDatasets: DatasetSummary[]
8+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface CollectionSummary {
2+
id: number
3+
alias: string
4+
displayName: string
5+
}

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria'
99
import { CollectionUserPermissions } from '../models/CollectionUserPermissions'
1010
import { PublicationStatus } from '../../../core/domain/models/PublicationStatus'
1111
import { CollectionItemType } from '../../../collections/domain/models/CollectionItemType'
12+
import { CollectionLinks } from '../models/CollectionLinks'
1213

1314
export interface ICollectionsRepository {
1415
getCollection(collectionIdOrAlias: number | string): Promise<Collection>
@@ -58,4 +59,5 @@ export interface ICollectionsRepository {
5859
linkedCollectionIdOrAlias: number | string,
5960
linkingCollectionIdOrAlias: number | string
6061
): Promise<void>
62+
getCollectionLinks(collectionIdOrAlias: number | string): Promise<CollectionLinks>
6163
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
3+
import { CollectionLinks } from '../models/CollectionLinks'
4+
5+
export class GetCollectionItems implements UseCase<CollectionLinks> {
6+
private collectionsRepository: ICollectionsRepository
7+
8+
constructor(collectionsRepository: ICollectionsRepository) {
9+
this.collectionsRepository = collectionsRepository
10+
}
11+
12+
/**
13+
* Returns a CollectionLinks object containing other collections this collection is linked to, the other collections linking to this collection, and datasets linked to this collection, given the collection identifier or alias.
14+
*
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+
* If this parameter is not set, the default value is: ':root'
17+
* @returns {Promise<CollectionLinks>}
18+
*/
19+
async execute(collectionId: number | string): Promise<CollectionLinks> {
20+
return await this.collectionsRepository.getCollectionLinks(collectionId)
21+
}
22+
}

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { ICollectionsRepository } from '../../domain/repositories/ICollectionsRe
33
import {
44
transformCollectionFacetsResponseToCollectionFacets,
55
transformCollectionItemsResponseToCollectionItemSubset,
6+
transformCollectionLinksResponseToCollectionLinks,
67
transformCollectionResponseToCollection,
78
transformMyDataResponseToCollectionItemSubset
89
} from './transformers/collectionTransformers'
@@ -36,6 +37,7 @@ import {
3637
import { ApiConstants } from '../../../core/infra/repositories/ApiConstants'
3738
import { PublicationStatus } from '../../../core/domain/models/PublicationStatus'
3839
import { ReadError } from '../../../core/domain/repositories/ReadError'
40+
import { CollectionLinks } from '../../domain/models/CollectionLinks'
3941

4042
export interface NewCollectionRequestPayload {
4143
alias: string
@@ -471,4 +473,14 @@ export class CollectionsRepository extends ApiRepository implements ICollections
471473
throw error
472474
})
473475
}
476+
public async getCollectionLinks(collectionIdOrAlias: number | string): Promise<CollectionLinks> {
477+
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/links`, true)
478+
.then((response) => {
479+
console.log('getCollectionLinks response:', response.data.data) // Print the response
480+
return transformCollectionLinksResponseToCollectionLinks(response)
481+
})
482+
.catch((error) => {
483+
throw error
484+
})
485+
}
474486
}

src/collections/infra/repositories/transformers/collectionTransformers.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import {
4444
PublicationStatusCount
4545
} from '../../../domain/models/MyDataCollectionItemSubset'
4646
import { PublicationStatus } from '../../../../core/domain/models/PublicationStatus'
47+
import { CollectionLinks } from '../../../domain/models/CollectionLinks'
4748

4849
export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => {
4950
const collectionPayload = response.data.data
@@ -152,7 +153,22 @@ export const transformCollectionItemsResponseToCollectionItemSubset = (
152153
...(countPerObjectType && { countPerObjectType })
153154
}
154155
}
155-
156+
export const transformCollectionLinksResponseToCollectionLinks = (
157+
response: AxiosResponse
158+
): CollectionLinks => {
159+
const responseDataPayload = response.data.data
160+
const linkedCollections = responseDataPayload.linkedDataverses
161+
const collectionsLinkingToThis = responseDataPayload.dataversesLinkingToThis
162+
const linkedDatasets = responseDataPayload.linkedDatasets
163+
console.log('linkedCollections', linkedCollections)
164+
console.log('collectionsLinkedToThis', collectionsLinkingToThis)
165+
console.log('linkedDatasets', linkedDatasets)
166+
return {
167+
linkedCollections,
168+
collectionsLinkingToThis,
169+
linkedDatasets
170+
}
171+
}
156172
export const transformMyDataResponseToCollectionItemSubset = (
157173
response: AxiosResponse
158174
): MyDataCollectionItemSubset => {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface DatasetSummary {
2+
persistentId: string
3+
title: string
4+
}

test/.DS_Store

0 Bytes
Binary file not shown.

test/environment/.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
POSTGRES_VERSION=17
22
DATAVERSE_DB_USER=dataverse
33
SOLR_VERSION=9.8.0
4-
DATAVERSE_IMAGE_REGISTRY=docker.io
5-
DATAVERSE_IMAGE_TAG=unstable
4+
DATAVERSE_IMAGE_REGISTRY=ghcr.io
5+
DATAVERSE_IMAGE_TAG=11724-extend-list-dataverse-collection-links
66
DATAVERSE_BOOTSTRAP_TIMEOUT=5m

0 commit comments

Comments
 (0)