Skip to content

Commit d48324a

Browse files
authored
Merge pull request #215 from IQSS/feat/214-extend-get-collection
Extend get collection use case
2 parents 67d3b0e + 7d31a70 commit d48324a

File tree

9 files changed

+83
-18
lines changed

9 files changed

+83
-18
lines changed
+2-12
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { CollectionType } from '../models/CollectionType'
2+
13
export interface CollectionDTO {
24
alias: string
35
name: string
@@ -15,15 +17,3 @@ export interface CollectionInputLevelDTO {
1517
include: boolean
1618
required: boolean
1719
}
18-
19-
export enum CollectionType {
20-
RESEARCHERS = 'RESEARCHERS',
21-
RESEARCH_PROJECTS = 'RESEARCH_PROJECTS',
22-
JOURNALS = 'JOURNALS',
23-
ORGANIZATIONS_INSTITUTIONS = 'ORGANIZATIONS_INSTITUTIONS',
24-
TEACHING_COURSES = 'TEACHING_COURSES',
25-
UNCATEGORIZED = 'UNCATEGORIZED',
26-
LABORATORY = 'LABORATORY',
27-
RESEARCH_GROUP = 'RESEARCH_GROUP',
28-
DEPARTMENT = 'DEPARTMENT'
29-
}

src/collections/domain/models/Collection.ts

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { DvObjectOwnerNode } from '../../../core'
2+
import { CollectionContact } from './CollectionContact'
3+
import { CollectionType } from './CollectionType'
24

35
export interface Collection {
46
id: number
@@ -9,6 +11,10 @@ export interface Collection {
911
description?: string
1012
isPartOf: DvObjectOwnerNode
1113
inputLevels?: CollectionInputLevel[]
14+
type: CollectionType
15+
contacts?: CollectionContact[]
16+
isMetadataBlockRoot: boolean
17+
isFacetRoot: boolean
1218
}
1319

1420
export interface CollectionInputLevel {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface CollectionContact {
2+
email: string
3+
displayOrder: number
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export enum CollectionType {
2+
RESEARCHERS = 'RESEARCHERS',
3+
RESEARCH_PROJECTS = 'RESEARCH_PROJECTS',
4+
JOURNALS = 'JOURNALS',
5+
ORGANIZATIONS_INSTITUTIONS = 'ORGANIZATIONS_INSTITUTIONS',
6+
TEACHING_COURSES = 'TEACHING_COURSES',
7+
UNCATEGORIZED = 'UNCATEGORIZED',
8+
LABORATORY = 'LABORATORY',
9+
RESEARCH_GROUP = 'RESEARCH_GROUP',
10+
DEPARTMENT = 'DEPARTMENT'
11+
}

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

+9
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,19 @@ export interface CollectionPayload {
99
description?: string
1010
isPartOf: OwnerNodePayload
1111
inputLevels?: CollectionInputLevelPayload[]
12+
dataverseContacts?: CollectionContactPayload[]
13+
dataverseType: string
14+
isMetadataBlockRoot: boolean
15+
isFacetRoot: boolean
1216
}
1317

1418
export interface CollectionInputLevelPayload {
1519
datasetFieldTypeName: string
1620
required: boolean
1721
include: boolean
1822
}
23+
24+
export interface CollectionContactPayload {
25+
contactEmail: string
26+
displayOrder: number
27+
}

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

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { Collection, CollectionInputLevel } from '../../../domain/models/Collection'
22
import { AxiosResponse } from 'axios'
3-
import { CollectionInputLevelPayload, CollectionPayload } from './CollectionPayload'
3+
import {
4+
CollectionContactPayload,
5+
CollectionInputLevelPayload,
6+
CollectionPayload
7+
} from './CollectionPayload'
48
import { transformPayloadToOwnerNode } from '../../../../core/infra/repositories/transformers/dvObjectOwnerNodeTransformer'
59
import { transformHtmlToMarkdown } from '../../../../datasets/infra/repositories/transformers/datasetTransformers'
610
import { CollectionFacet } from '../../../domain/models/CollectionFacet'
@@ -15,6 +19,8 @@ import { transformFilePreviewPayloadToFilePreview } from '../../../../files/infr
1519
import { transformCollectionPreviewPayloadToCollectionPreview } from './collectionPreviewsTransformers'
1620
import { CollectionPreviewPayload } from './CollectionPreviewPayload'
1721
import { CollectionPreview } from '../../../domain/models/CollectionPreview'
22+
import { CollectionContact } from '../../../domain/models/CollectionContact'
23+
import { CollectionType } from '../../../domain/models/CollectionType'
1824

1925
export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => {
2026
const collectionPayload = response.data.data
@@ -39,6 +45,9 @@ const transformPayloadToCollection = (collectionPayload: CollectionPayload): Col
3945
name: collectionPayload.name,
4046
isReleased: collectionPayload.isReleased,
4147
affiliation: collectionPayload.affiliation,
48+
type: collectionPayload.dataverseType as CollectionType,
49+
isMetadataBlockRoot: collectionPayload.isMetadataBlockRoot,
50+
isFacetRoot: collectionPayload.isFacetRoot,
4251
...(collectionPayload.description && {
4352
description: transformHtmlToMarkdown(collectionPayload.description)
4453
}),
@@ -47,6 +56,9 @@ const transformPayloadToCollection = (collectionPayload: CollectionPayload): Col
4756
}),
4857
...(collectionPayload.inputLevels && {
4958
inputLevels: transformInputLevelsPayloadToInputLevels(collectionPayload.inputLevels)
59+
}),
60+
...(collectionPayload.dataverseContacts && {
61+
contacts: transformContactsPayloadToContacts(collectionPayload.dataverseContacts)
5062
})
5163
}
5264
return collectionModel
@@ -90,3 +102,12 @@ export const transformCollectionItemsResponseToCollectionItemSubset = (
90102
totalItemCount: responseDataPayload.total_count
91103
}
92104
}
105+
106+
const transformContactsPayloadToContacts = (
107+
contactsPayload: CollectionContactPayload[]
108+
): CollectionContact[] => {
109+
return contactsPayload.map((contactPayload) => ({
110+
email: contactPayload.contactEmail,
111+
displayOrder: contactPayload.displayOrder
112+
}))
113+
}

test/environment/.env

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
POSTGRES_VERSION=13
22
DATAVERSE_DB_USER=dataverse
33
SOLR_VERSION=9.3.0
4-
DATAVERSE_IMAGE_REGISTRY=ghcr.io
5-
DATAVERSE_IMAGE_TAG=10904-edit-dataverse-collection
4+
DATAVERSE_IMAGE_REGISTRY=docker.io
5+
DATAVERSE_IMAGE_TAG=unstable
66
DATAVERSE_BOOTSTRAP_TIMEOUT=5m

test/integration/collections/CollectionsRepository.test.ts

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { CollectionPayload } from '../../../src/collections/infra/repositories/t
2323
import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
2424
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
2525
import { PublicationStatus } from '../../../src/core/domain/models/PublicationStatus'
26+
import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
2627

2728
describe('CollectionsRepository', () => {
2829
const testCollectionAlias = 'collectionsRepositoryTestCollection'
@@ -61,6 +62,10 @@ describe('CollectionsRepository', () => {
6162
expect(actual.affiliation).toBe(undefined)
6263
expect(actual.description).toBe('The root dataverse.')
6364
expect(actual.inputLevels).toBe(undefined)
65+
expect(actual.type).toBe(CollectionType.UNCATEGORIZED)
66+
expect(actual.contacts).toEqual([{ email: '[email protected]', displayOrder: 0 }])
67+
expect(actual.isMetadataBlockRoot).toBe(true)
68+
expect(actual.isFacetRoot).toBe(true)
6469
})
6570

6671
test('should return isReleased is true for root collection', async () => {

test/testHelpers/collections/collectionHelper.ts

+22-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import { DvObjectType } from '../../../src'
33
import { CollectionPayload } from '../../../src/collections/infra/repositories/transformers/CollectionPayload'
44
import { TestConstants } from '../TestConstants'
55
import axios from 'axios'
6-
import { CollectionDTO, CollectionType } from '../../../src/collections/domain/dtos/CollectionDTO'
6+
import { CollectionDTO } from '../../../src/collections/domain/dtos/CollectionDTO'
77
import { NewCollectionRequestPayload } from '../../../src/collections/infra/repositories/CollectionsRepository'
88
import { CollectionFacetPayload } from '../../../src/collections/infra/repositories/transformers/CollectionFacetPayload'
9+
import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
910

1011
const COLLECTION_ID = 11111
1112
const COLLECTION_IS_RELEASED = true
@@ -35,7 +36,16 @@ export const createCollectionModel = (): Collection => {
3536
required: true,
3637
include: true
3738
}
38-
]
39+
],
40+
type: CollectionType.UNCATEGORIZED,
41+
contacts: [
42+
{
43+
44+
displayOrder: 0
45+
}
46+
],
47+
isMetadataBlockRoot: true,
48+
isFacetRoot: true
3949
}
4050
return collectionModel
4151
}
@@ -55,7 +65,16 @@ export const createCollectionPayload = (): CollectionPayload => {
5565
required: true,
5666
include: true
5767
}
58-
]
68+
],
69+
dataverseType: CollectionType.UNCATEGORIZED,
70+
dataverseContacts: [
71+
{
72+
contactEmail: '[email protected]',
73+
displayOrder: 0
74+
}
75+
],
76+
isMetadataBlockRoot: true,
77+
isFacetRoot: true
5978
}
6079
return collectionPayload
6180
}

0 commit comments

Comments
 (0)