Skip to content

Commit 7fa4540

Browse files
committed
Changed: returning detailed facet model instead of string
1 parent 1c18a8c commit 7fa4540

File tree

13 files changed

+96
-44
lines changed

13 files changed

+96
-44
lines changed

docs/useCases.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ If no collection identifier is specified, the default collection identifier; `ro
104104

105105
#### Get Collection Facets
106106

107-
Returns the names of the configured collection facets, given a collection identifier or alias.
107+
Returns a [CollectionFacet](../src/collections/domain/models/CollectionFacet.ts) array containing the facets of the requested collection, given the collection identifier or alias.
108108

109109
##### Example call:
110110

@@ -115,7 +115,7 @@ const collectionIdOrAlias = 12345
115115

116116
getCollectionFacets
117117
.execute(collectionId)
118-
.then((facets: string[]) => {
118+
.then((facets: CollectionFacet[]) => {
119119
/* ... */
120120
})
121121
.catch((error: Error) => {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface CollectionFacet {
2+
id: number
3+
name: string
4+
displayName: string
5+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { CollectionDTO } from '../dtos/CollectionDTO'
22
import { Collection } from '../models/Collection'
3+
import { CollectionFacet } from '../models/CollectionFacet'
34

45
export interface ICollectionsRepository {
56
getCollection(collectionIdOrAlias: number | string): Promise<Collection>
67
createCollection(
78
collectionDTO: CollectionDTO,
89
parentCollectionId: number | string
910
): Promise<number>
10-
getCollectionFacets(collectionIdOrAlias: number | string): Promise<string[]>
11+
getCollectionFacets(collectionIdOrAlias: number | string): Promise<CollectionFacet[]>
1112
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase'
22
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
33
import { ROOT_COLLECTION_ALIAS } from '../models/Collection'
4+
import { CollectionFacet } from '../models/CollectionFacet'
45

5-
export class GetCollectionFacets implements UseCase<string[]> {
6+
export class GetCollectionFacets implements UseCase<CollectionFacet[]> {
67
private collectionsRepository: ICollectionsRepository
78

89
constructor(collectionsRepository: ICollectionsRepository) {
910
this.collectionsRepository = collectionsRepository
1011
}
1112

1213
/**
13-
* Returns the names of the configured collection facets, given a collection identifier or alias.
14+
* Returns a CollectionFacet array containing the facets of the requested collection, given the collection identifier or alias.
1415
*
1516
* @param {number | string} [collectionIdOrAlias = 'root'] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
1617
* If this parameter is not set, the default value is: 'root'
1718
* @returns {Promise<string[]>}
1819
*/
19-
async execute(collectionIdOrAlias: number | string = ROOT_COLLECTION_ALIAS): Promise<string[]> {
20+
async execute(
21+
collectionIdOrAlias: number | string = ROOT_COLLECTION_ALIAS
22+
): Promise<CollectionFacet[]> {
2023
return await this.collectionsRepository.getCollectionFacets(collectionIdOrAlias)
2124
}
2225
}

src/collections/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ const getCollectionFacets = new GetCollectionFacets(collectionsRepository)
1212

1313
export { getCollection, createCollection, getCollectionFacets }
1414
export { Collection, CollectionInputLevel } from './domain/models/Collection'
15+
export { CollectionFacet } from './domain/models/CollectionFacet'
1516
export { CollectionDTO, CollectionInputLevelDTO } from './domain/dtos/CollectionDTO'

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
22
import { ICollectionsRepository } from '../../domain/repositories/ICollectionsRepository'
3-
import { transformCollectionResponseToCollection } from './transformers/collectionTransformers'
3+
import {
4+
transformCollectionFacetsResponseToCollectionFacets,
5+
transformCollectionResponseToCollection
6+
} from './transformers/collectionTransformers'
47
import { Collection, ROOT_COLLECTION_ALIAS } from '../../domain/models/Collection'
58
import { CollectionDTO } from '../../domain/dtos/CollectionDTO'
9+
import { CollectionFacet } from '../../domain/models/CollectionFacet'
610

711
export interface NewCollectionRequestPayload {
812
alias: string
@@ -87,9 +91,13 @@ export class CollectionsRepository extends ApiRepository implements ICollections
8791
})
8892
}
8993

90-
public async getCollectionFacets(collectionIdOrAlias: string | number): Promise<string[]> {
91-
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/facets`, true)
92-
.then((response) => response.data.data)
94+
public async getCollectionFacets(
95+
collectionIdOrAlias: string | number
96+
): Promise<CollectionFacet[]> {
97+
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/facets`, true, {
98+
returnDetails: true
99+
})
100+
.then((response) => transformCollectionFacetsResponseToCollectionFacets(response))
93101
.catch((error) => {
94102
throw error
95103
})
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface CollectionFacetPayload {
2+
id: string
3+
name: string
4+
displayName: string
5+
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,25 @@ import { AxiosResponse } from 'axios'
33
import { CollectionInputLevelPayload, CollectionPayload } from './CollectionPayload'
44
import { transformPayloadToOwnerNode } from '../../../../core/infra/repositories/transformers/dvObjectOwnerNodeTransformer'
55
import { transformHtmlToMarkdown } from '../../../../datasets/infra/repositories/transformers/datasetTransformers'
6+
import { CollectionFacet } from '../../../domain/models/CollectionFacet'
7+
import { CollectionFacetPayload } from './CollectionFacetPayload'
68

79
export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => {
810
const collectionPayload = response.data.data
911
return transformPayloadToCollection(collectionPayload)
1012
}
1113

14+
export const transformCollectionFacetsResponseToCollectionFacets = (
15+
response: AxiosResponse
16+
): CollectionFacet[] => {
17+
const facetsPayloads = response.data.data
18+
return facetsPayloads.map((facetsPayload: CollectionFacetPayload) => ({
19+
id: Number(facetsPayload.id),
20+
name: facetsPayload.name,
21+
displayName: facetsPayload.displayName
22+
}))
23+
}
24+
1225
const transformPayloadToCollection = (collectionPayload: CollectionPayload): Collection => {
1326
const collectionModel: Collection = {
1427
id: collectionPayload.id,

test/functional/collections/GetCollectionFacets.test.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ApiConfig, ReadError, getCollectionFacets } from '../../../src'
1+
import { ApiConfig, CollectionFacet, ReadError, getCollectionFacets } from '../../../src'
22
import { TestConstants } from '../../testHelpers/TestConstants'
33
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
44
import { ROOT_COLLECTION_ALIAS } from '../../../src/collections/domain/models/Collection'
@@ -13,16 +13,14 @@ describe('execute', () => {
1313
})
1414

1515
test('should return facets when a valid collection alias is provided', async () => {
16-
let actual: string[] = []
16+
let actual: CollectionFacet[] = []
1717
try {
1818
actual = await getCollectionFacets.execute(ROOT_COLLECTION_ALIAS)
1919
} catch (error) {
2020
throw new Error('Facets should be retrieved')
2121
} finally {
22-
expect(actual).toContain('authorName')
23-
expect(actual).toContain('subject')
24-
expect(actual).toContain('keywordValue')
25-
expect(actual).toContain('dateOfDeposit')
22+
expect(actual[0].name).toBe('authorName')
23+
expect(actual.length).toBe(4)
2624
}
2725
})
2826

test/integration/collections/CollectionsRepository.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ describe('CollectionsRepository', () => {
149149
describe('getCollectionFacets', () => {
150150
test('should return collection facets given a valid collection alias', async () => {
151151
const actual = await sut.getCollectionFacets(testCollectionAlias)
152-
expect(actual).toContain('authorName')
153-
expect(actual).toContain('subject')
154-
expect(actual).toContain('keywordValue')
155-
expect(actual).toContain('dateOfDeposit')
152+
expect(actual.length).toBe(4)
153+
expect(actual[0].name).toBe('authorName')
154+
expect(actual[0].displayName).toBe('Author Name')
155+
expect(actual[0].id).not.toBe(undefined)
156156
})
157157

158158
test('should return error when collection does not exist', async () => {

0 commit comments

Comments
 (0)