Skip to content
2 changes: 1 addition & 1 deletion src/collections/domain/models/CollectionItemSubset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export interface CollectionItemsFacetLabel {
count: number
}

interface CountPerObjectType {
export interface CountPerObjectType {
collections: number
datasets: number
files: number
Expand Down
17 changes: 17 additions & 0 deletions src/collections/domain/models/MyDataCollectionItemSubset.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { CollectionPreview } from './CollectionPreview'
import { DatasetPreview } from '../../../datasets'
import { FilePreview } from '../../../files'
import { CountPerObjectType } from './CollectionItemSubset'
import { PublicationStatus } from '../../../core/domain/models/PublicationStatus'

export interface MyDataCollectionItemSubset {
items: (CollectionPreview | DatasetPreview | FilePreview)[]
publicationStatusCounts: PublicationStatusCount[]
totalItemCount: number
countPerObjectType: CountPerObjectType
}

export interface PublicationStatusCount {
publicationStatus: PublicationStatus
count: number
}
7 changes: 4 additions & 3 deletions src/collections/domain/repositories/ICollectionsRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import { Collection } from '../models/Collection'
import { CollectionFacet } from '../models/CollectionFacet'
import { CollectionFeaturedItem } from '../models/CollectionFeaturedItem'
import { CollectionItemSubset } from '../models/CollectionItemSubset'
import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset'
import { CollectionSearchCriteria } from '../models/CollectionSearchCriteria'
import { CollectionUserPermissions } from '../models/CollectionUserPermissions'
import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus'
import { CollectionItemType } from '../../../../src/collections/domain/models/CollectionItemType'
import { PublicationStatus } from '../../../core/domain/models/PublicationStatus'
import { CollectionItemType } from '../../../collections/domain/models/CollectionItemType'

export interface ICollectionsRepository {
getCollection(collectionIdOrAlias: number | string): Promise<Collection>
Expand Down Expand Up @@ -35,7 +36,7 @@ export interface ICollectionsRepository {
selectedPage?: number,
searchText?: string,
otherUserName?: string
): Promise<CollectionItemSubset>
): Promise<MyDataCollectionItemSubset>
updateCollection(
collectionIdOrAlias: number | string,
updatedCollection: CollectionDTO
Expand Down
10 changes: 5 additions & 5 deletions src/collections/domain/useCases/GetMyDataCollectionItems.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { UseCase } from '../../../core/domain/useCases/UseCase'
import { CollectionItemSubset } from '../models/CollectionItemSubset'
import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset'
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
import { CollectionItemType } from '../../../../src/collections/domain/models/CollectionItemType'
import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus'
import { CollectionItemType } from '../../../collections/domain/models/CollectionItemType'
import { PublicationStatus } from '../../../core/domain/models/PublicationStatus'

export class GetMyDataCollectionItems implements UseCase<CollectionItemSubset> {
export class GetMyDataCollectionItems implements UseCase<MyDataCollectionItemSubset> {
private collectionsRepository: ICollectionsRepository

constructor(collectionsRepository: ICollectionsRepository) {
Expand All @@ -31,7 +31,7 @@ export class GetMyDataCollectionItems implements UseCase<CollectionItemSubset> {
selectedPage?: number,
searchText?: string,
otherUserName?: string
): Promise<CollectionItemSubset> {
): Promise<MyDataCollectionItemSubset> {
return this.collectionsRepository.getMyDataCollectionItems(
roleIds,
collectionItemTypes,
Expand Down
5 changes: 3 additions & 2 deletions src/collections/infra/repositories/CollectionsRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { CollectionFacet } from '../../domain/models/CollectionFacet'
import { CollectionUserPermissions } from '../../domain/models/CollectionUserPermissions'
import { transformCollectionUserPermissionsResponseToCollectionUserPermissions } from './transformers/collectionUserPermissionsTransformers'
import { CollectionItemSubset } from '../../domain/models/CollectionItemSubset'
import { MyDataCollectionItemSubset } from '../../domain/models/MyDataCollectionItemSubset'
import {
CollectionSearchCriteria,
OrderType,
Expand All @@ -22,7 +23,7 @@ import { CollectionFeaturedItem } from '../../domain/models/CollectionFeaturedIt
import { transformCollectionFeaturedItemsPayloadToCollectionFeaturedItems } from './transformers/collectionFeaturedItemsTransformer'
import { CollectionFeaturedItemsDTO } from '../../domain/dtos/CollectionFeaturedItemsDTO'
import { ApiConstants } from '../../../core/infra/repositories/ApiConstants'
import { PublicationStatus } from '../../../../src/core/domain/models/PublicationStatus'
import { PublicationStatus } from '../../../core/domain/models/PublicationStatus'
import { ReadError } from '../../../core/domain/repositories/ReadError'

export interface NewCollectionRequestPayload {
Expand Down Expand Up @@ -209,7 +210,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections
selectedPage?: number,
searchText?: string,
userIdentifier?: string
): Promise<CollectionItemSubset> {
): Promise<MyDataCollectionItemSubset> {
const queryParams = new URLSearchParams()

if (limit) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { CollectionFacet } from '../../../domain/models/CollectionFacet'
import { CollectionFacetPayload } from './CollectionFacetPayload'
import {
CollectionItemsFacet,
CollectionItemsFacetLabel,
CollectionItemSubset
} from '../../../domain/models/CollectionItemSubset'
import { DatasetPreview } from '../../../../datasets'
Expand Down Expand Up @@ -39,7 +38,11 @@ import { MyDataFilePreviewPayload } from '../../../../files/infra/repositories/t
import { MyDataDatasetPreviewPayload } from '../../../../datasets/infra/repositories/transformers/MyDataDatasetPreviewPayload'
import { MyDataCollectionPreviewPayload } from './MyDataCollectionPreviewPayload'
import { MyDataCountPerObjectTypePayload } from './MyDataCountPerObjectTypePayload'
import { MyDataPublicationStatusCountsPayload } from './MyDataPublicationStatusCountsPayload'
import {
MyDataCollectionItemSubset,
PublicationStatusCount
} from '../../../domain/models/MyDataCollectionItemSubset'
import { PublicationStatus } from '../../../../core/domain/models/PublicationStatus'

export const transformCollectionResponseToCollection = (response: AxiosResponse): Collection => {
const collectionPayload = response.data.data
Expand Down Expand Up @@ -149,7 +152,7 @@ export const transformCollectionItemsResponseToCollectionItemSubset = (

export const transformMyDataResponseToCollectionItemSubset = (
response: AxiosResponse
): CollectionItemSubset => {
): MyDataCollectionItemSubset => {
const responseDataPayload = response.data.data
const itemsPayload = responseDataPayload.items
const countPerObjectTypePayload = responseDataPayload[
Expand Down Expand Up @@ -188,14 +191,32 @@ export const transformMyDataResponseToCollectionItemSubset = (
datasets: countPerObjectTypePayload['datasets_count'],
files: countPerObjectTypePayload['files_count']
}
const publishingFacet: CollectionItemsFacet = transformPublicationStatusResponseToFacet(
responseDataPayload.pubstatus_counts as MyDataPublicationStatusCountsPayload
)
const facets: CollectionItemsFacet[] = [publishingFacet]

const publicationStatusCounts: PublicationStatusCount[] = [
{
publicationStatus: PublicationStatus.Published,
count: responseDataPayload.pubstatus_counts.published_count
},
{
publicationStatus: PublicationStatus.Unpublished,
count: responseDataPayload.pubstatus_counts.unpublished_count
},
{
publicationStatus: PublicationStatus.Draft,
count: responseDataPayload.pubstatus_counts.draft_count
},
{
publicationStatus: PublicationStatus.InReview,
count: responseDataPayload.pubstatus_counts.in_review_count
},
{
publicationStatus: PublicationStatus.Deaccessioned,
count: responseDataPayload.pubstatus_counts.deaccessioned_count
}
]
return {
items,
facets,
publicationStatusCounts,
totalItemCount: responseDataPayload.pagination.numResults,
countPerObjectType
}
Expand All @@ -209,20 +230,3 @@ const transformContactsPayloadToContacts = (
displayOrder: contactPayload.displayOrder
}))
}

const transformPublicationStatusResponseToFacet = (
publicationStatusCounts: MyDataPublicationStatusCountsPayload
): CollectionItemsFacet => {
const labels: CollectionItemsFacetLabel[] = [
{ name: 'Published', count: publicationStatusCounts.published_count },
{ name: 'Unpublished', count: publicationStatusCounts.unpublished_count },
{ name: 'Draft', count: publicationStatusCounts.draft_count },
{ name: 'In Review', count: publicationStatusCounts.in_review_count },
{ name: 'Deaccessioned', count: publicationStatusCounts.deaccessioned_count }
]
return {
name: 'publicationStatus',
friendlyName: 'Publication Status',
labels
}
}
1 change: 1 addition & 0 deletions src/core/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ export { ReadError } from './domain/repositories/ReadError'
export { WriteError } from './domain/repositories/WriteError'
export { ApiConfig } from './infra/repositories/ApiConfig'
export { DvObjectOwnerNode, DvObjectType } from './domain/models/DvObjectOwnerNode'
export { PublicationStatus } from './domain/models/PublicationStatus'
44 changes: 19 additions & 25 deletions test/functional/collections/GetMyDataCollectionItems.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,32 +106,26 @@ describe('execute', () => {
expect(actualCollectionPreview.alias).toBe(testCollectionAlias)

expect(actual.totalItemCount).toBe(1)
expect(actual.facets).toEqual([
expect(actual.publicationStatusCounts).toEqual([
{
name: 'publicationStatus',
friendlyName: 'Publication Status',
labels: [
{
name: 'Published',
count: 0
},
{
name: 'Unpublished',
count: 1
},
{
name: 'Draft',
count: 0
},
{
name: 'In Review',
count: 0
},
{
name: 'Deaccessioned',
count: 0
}
]
publicationStatus: 'Published',
count: 0
},
{
publicationStatus: 'Unpublished',
count: 1
},
{
publicationStatus: 'Draft',
count: 0
},
{
publicationStatus: 'In Review',
count: 0
},
{
publicationStatus: 'Deaccessioned',
count: 0
}
])
expect(actual.countPerObjectType).toEqual({
Expand Down
76 changes: 27 additions & 49 deletions test/integration/collections/CollectionsRepository.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,7 @@ describe('CollectionsRepository', () => {
expect(actualFilePreview.fileType).toBe('Plain Text')
expect(actualFilePreview.md5).toBe(expectedFileMd5)
expect(actualFilePreview.name).toBe(expectedFileName)
expect(actualFilePreview.publicationStatuses.length).toBe(2)
expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Unpublished)
expect(actualFilePreview.publicationStatuses).toContain(PublicationStatus.Draft)
expect(actualFilePreview.sizeInBytes).toBe(12)
Expand Down Expand Up @@ -1420,19 +1421,14 @@ describe('CollectionsRepository', () => {
const expectedFileName = 'test-file-2.txt'
const expectedCollectionsName = 'Test Collection'

const expectedFacetsAll = [
{
name: 'publicationStatus',
friendlyName: 'Publication Status',
labels: [
{ name: 'Published', count: 0 },
{ name: 'Unpublished', count: 3 },
{ name: 'Draft', count: 2 },
{ name: 'In Review', count: 0 },
{ name: 'Deaccessioned', count: 0 }
]
}
const expectedPublicationStatusCounts = [
{ publicationStatus: 'Published', count: 0 },
{ publicationStatus: 'Unpublished', count: 3 },
{ publicationStatus: 'Draft', count: 2 },
{ publicationStatus: 'In Review', count: 0 },
{ publicationStatus: 'Deaccessioned', count: 0 }
]

expect(actual.items.length).toBe(3)
expect(actual.totalItemCount).toBe(3)
expect(actual.countPerObjectType.collections).toBe(1)
Expand Down Expand Up @@ -1490,7 +1486,7 @@ describe('CollectionsRepository', () => {
expect(actualCollectionPreview.affiliation).toBe('test affiliation')
expect(actualCollectionPreview.type).toBe(CollectionItemType.COLLECTION)

expect(actual.facets).toEqual(expectedFacetsAll)
expect(actual.publicationStatusCounts).toEqual(expectedPublicationStatusCounts)

// Test limit and selectedPage
actual = await sut.getMyDataCollectionItems(
Expand Down Expand Up @@ -1569,18 +1565,12 @@ describe('CollectionsRepository', () => {
expect(actual.items.length).toBe(1)
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName)
expect(actual.facets).toEqual([
{
name: 'publicationStatus',
friendlyName: 'Publication Status',
labels: [
{ name: 'Published', count: 0 },
{ name: 'Unpublished', count: 1 },
{ name: 'Draft', count: 0 },
{ name: 'In Review', count: 0 },
{ name: 'Deaccessioned', count: 0 }
]
}
expect(actual.publicationStatusCounts).toEqual([
{ publicationStatus: 'Published', count: 0 },
{ publicationStatus: 'Unpublished', count: 1 },
{ publicationStatus: 'Draft', count: 0 },
{ publicationStatus: 'In Review', count: 0 },
{ publicationStatus: 'Deaccessioned', count: 0 }
])
expect(actual.countPerObjectType.collections).toBe(1)
expect(actual.countPerObjectType.datasets).toBe(0)
Expand All @@ -1598,18 +1588,12 @@ describe('CollectionsRepository', () => {
expect(actual.items.length).toBe(1)
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
expect(actual.facets).toEqual([
{
name: 'publicationStatus',
friendlyName: 'Publication Status',
labels: [
{ name: 'Published', count: 0 },
{ name: 'Unpublished', count: 1 },
{ name: 'Draft', count: 1 },
{ name: 'In Review', count: 0 },
{ name: 'Deaccessioned', count: 0 }
]
}
expect(actual.publicationStatusCounts).toEqual([
{ publicationStatus: 'Published', count: 0 },
{ publicationStatus: 'Unpublished', count: 1 },
{ publicationStatus: 'Draft', count: 1 },
{ publicationStatus: 'In Review', count: 0 },
{ publicationStatus: 'Deaccessioned', count: 0 }
])
expect(actual.countPerObjectType.collections).toBe(0)
expect(actual.countPerObjectType.datasets).toBe(1)
Expand All @@ -1628,18 +1612,12 @@ describe('CollectionsRepository', () => {
expect(actual.items.length).toBe(1)
expect(actual.totalItemCount).toBe(1)
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
expect(actual.facets).toEqual([
{
name: 'publicationStatus',
friendlyName: 'Publication Status',
labels: [
{ name: 'Published', count: 0 },
{ name: 'Unpublished', count: 1 },
{ name: 'Draft', count: 1 },
{ name: 'In Review', count: 0 },
{ name: 'Deaccessioned', count: 0 }
]
}
expect(actual.publicationStatusCounts).toEqual([
{ publicationStatus: 'Published', count: 0 },
{ publicationStatus: 'Unpublished', count: 1 },
{ publicationStatus: 'Draft', count: 1 },
{ publicationStatus: 'In Review', count: 0 },
{ publicationStatus: 'Deaccessioned', count: 0 }
])

expect(actual.countPerObjectType.collections).toBe(0)
Expand Down