Skip to content

Commit 14a99ff

Browse files
committed
resolve merge conflicts
2 parents 7f18ee4 + 49b2f23 commit 14a99ff

26 files changed

+417
-53
lines changed

docs/useCases.md

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ The different use cases currently available in the package are classified below,
4545
- [File Uploading Use Cases](#file-uploading-use-cases)
4646
- [Metadata Blocks](#metadata-blocks)
4747
- [Metadata Blocks read use cases](#metadata-blocks-read-use-cases)
48+
- [Get All Facetable Metadata Fields](#get-all-facetable-metadata-fields)
4849
- [Get All Metadata Blocks](#get-all-metadata-blocks)
4950
- [Get Metadata Block By Name](#get-metadata-block-by-name)
5051
- [Get Collection Metadata Blocks](#get-collection-metadata-blocks)
@@ -106,7 +107,7 @@ If no collection identifier is specified, the default collection identifier; `ro
106107

107108
#### Get Collection Facets
108109

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

111112
##### Example call:
112113

@@ -117,7 +118,7 @@ const collectionIdOrAlias = 12345
117118

118119
getCollectionFacets
119120
.execute(collectionId)
120-
.then((facets: string[]) => {
121+
.then((facets: CollectionFacet[]) => {
121122
/* ... */
122123
})
123124
.catch((error: Error) => {
@@ -194,7 +195,7 @@ The use case returns a number, which is the identifier of the created collection
194195

195196
#### Publish a Collection
196197

197-
Publishes a Collection, given the collection identifier.
198+
Publishes a Collection, given the collection identifier.
198199

199200
##### Example call:
200201

@@ -209,6 +210,7 @@ publishCollection.execute(collectionIdOrAlias)
209210

210211
/* ... */
211212
```
213+
212214
The `collectionIdOrAlias` is a generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId).
213215

214216
_See [use case](../src/collections/domain/useCases/PublishCollection.ts)_ definition.
@@ -1023,6 +1025,26 @@ The following error might arise from the `AddUploadedFileToDataset` use case:
10231025

10241026
### Metadata Blocks read use cases
10251027

1028+
#### Get All Facetable Metadata Fields
1029+
1030+
Returns a [MetadataFieldInfo](../src/metadataBlocks/domain/models/MetadataBlock.ts) array containing all facetable metadata fields defined in the installation.
1031+
1032+
##### Example call:
1033+
1034+
```typescript
1035+
import { getAllFacetableMetadataFields } from '@iqss/dataverse-client-javascript'
1036+
1037+
/* ... */
1038+
1039+
getAllFacetableMetadataFields.execute().then((metadataFieldInfos: MetadataFieldInfo[]) => {
1040+
/* ... */
1041+
})
1042+
1043+
/* ... */
1044+
```
1045+
1046+
_See [use case](../src/metadataBlocks/domain/useCases/GetAllFacetableMetadataFields.ts) implementation_.
1047+
10261048
#### Get All Metadata Blocks
10271049

10281050
Returns a [MetadataBlock](../src/metadataBlocks/domain/models/MetadataBlock.ts) array containing the metadata blocks defined in the installation.
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+
}

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { CollectionDTO } from '../dtos/CollectionDTO'
22
import { Collection } from '../models/Collection'
3+
import { CollectionFacet } from '../models/CollectionFacet'
34
import { CollectionUserPermissions } from '../models/CollectionUserPermissions'
45

56
export interface ICollectionsRepository {
@@ -8,8 +9,8 @@ export interface ICollectionsRepository {
89
collectionDTO: CollectionDTO,
910
parentCollectionId: number | string
1011
): Promise<number>
11-
getCollectionFacets(collectionIdOrAlias: number | string): Promise<string[]>
1212
publishCollection(collectionIdOrAlias: number | string): Promise<void>
13+
getCollectionFacets(collectionIdOrAlias: number | string): Promise<CollectionFacet[]>
1314
getCollectionUserPermissions(
1415
collectionIdOrAlias: number | string
1516
): Promise<CollectionUserPermissions>
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
@@ -22,5 +22,6 @@ export {
2222
publishCollection
2323
}
2424
export { Collection, CollectionInputLevel } from './domain/models/Collection'
25+
export { CollectionFacet } from './domain/models/CollectionFacet'
2526
export { CollectionUserPermissions } from './domain/models/CollectionUserPermissions'
2627
export { CollectionDTO, CollectionInputLevelDTO } from './domain/dtos/CollectionDTO'

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 21 additions & 5 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
import { CollectionUserPermissions } from '../../domain/models/CollectionUserPermissions'
711
import { transformCollectionUserPermissionsResponseToCollectionUserPermissions } from './transformers/collectionUserPermissionsTransformers'
812

@@ -11,6 +15,8 @@ export interface NewCollectionRequestPayload {
1115
name: string
1216
dataverseContacts: NewCollectionContactRequestPayload[]
1317
dataverseType: string
18+
description?: string
19+
affiliation?: string
1420
metadataBlocks: NewCollectionMetadataBlocksRequestPayload
1521
}
1622

@@ -56,7 +62,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections
5662
)
5763

5864
const inputLevelsRequestBody: NewCollectionInputLevelRequestPayload[] =
59-
collectionDTO.inputLevels.map((inputLevel) => ({
65+
collectionDTO.inputLevels?.map((inputLevel) => ({
6066
datasetFieldTypeName: inputLevel.datasetFieldName,
6167
include: inputLevel.include,
6268
required: inputLevel.required
@@ -67,6 +73,12 @@ export class CollectionsRepository extends ApiRepository implements ICollections
6773
name: collectionDTO.name,
6874
dataverseContacts: dataverseContacts,
6975
dataverseType: collectionDTO.type,
76+
...(collectionDTO.description && {
77+
description: collectionDTO.description
78+
}),
79+
...(collectionDTO.affiliation && {
80+
affiliation: collectionDTO.affiliation
81+
}),
7082
metadataBlocks: {
7183
metadataBlockNames: collectionDTO.metadataBlockNames,
7284
facetIds: collectionDTO.facetIds,
@@ -81,9 +93,13 @@ export class CollectionsRepository extends ApiRepository implements ICollections
8193
})
8294
}
8395

84-
public async getCollectionFacets(collectionIdOrAlias: string | number): Promise<string[]> {
85-
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/facets`, true)
86-
.then((response) => response.data.data)
96+
public async getCollectionFacets(
97+
collectionIdOrAlias: string | number
98+
): Promise<CollectionFacet[]> {
99+
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/facets`, true, {
100+
returnDetails: true
101+
})
102+
.then((response) => transformCollectionFacetsResponseToCollectionFacets(response))
87103
.catch((error) => {
88104
throw error
89105
})
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,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { MetadataFieldInfo } from '../..'
2+
3+
export interface IMetadataFieldInfosRepository {
4+
getAllFacetableMetadataFields(): Promise<MetadataFieldInfo[]>
5+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { MetadataFieldInfo } from '../..'
3+
import { IMetadataFieldInfosRepository } from '../repositories/IMetadataFieldInfosRepository'
4+
5+
export class GetAllFacetableMetadataFields implements UseCase<MetadataFieldInfo[]> {
6+
private metadataFieldInfosRepository: IMetadataFieldInfosRepository
7+
8+
constructor(metadataFieldInfosRepository: IMetadataFieldInfosRepository) {
9+
this.metadataFieldInfosRepository = metadataFieldInfosRepository
10+
}
11+
12+
/**
13+
* Returns a MetadataFieldInfo array containing all facetable metadata fields defined in the installation.
14+
*
15+
* @returns {Promise<MetadataFieldInfo[]>}
16+
*/
17+
async execute(): Promise<MetadataFieldInfo[]> {
18+
return await this.metadataFieldInfosRepository.getAllFacetableMetadataFields()
19+
}
20+
}

0 commit comments

Comments
 (0)