Skip to content

Commit b0de9ea

Browse files
committed
feat: sort by name,date - asc,desc
1 parent a67b55b commit b0de9ea

File tree

5 files changed

+126
-15
lines changed

5 files changed

+126
-15
lines changed
Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
import { CollectionItemType } from './CollectionItemType'
2+
import { OrderType, SortType } from './GetCollectionItemsQueryParams'
23

34
export class CollectionSearchCriteria {
45
constructor(
56
public readonly searchText?: string,
6-
public readonly itemTypes?: CollectionItemType[]
7+
public readonly itemTypes?: CollectionItemType[],
8+
public readonly sort?: SortType,
9+
public readonly order?: OrderType
710
) {}
811

912
withSearchText(searchText: string | undefined): CollectionSearchCriteria {
10-
return new CollectionSearchCriteria(searchText, this.itemTypes)
13+
return new CollectionSearchCriteria(searchText, this.itemTypes, this.sort, this.order)
1114
}
1215

1316
withItemTypes(itemTypes: CollectionItemType[] | undefined): CollectionSearchCriteria {
14-
return new CollectionSearchCriteria(this.searchText, itemTypes)
17+
return new CollectionSearchCriteria(this.searchText, itemTypes, this.sort, this.order)
18+
}
19+
20+
withSort(sort: SortType | undefined): CollectionSearchCriteria {
21+
return new CollectionSearchCriteria(this.searchText, this.itemTypes, sort, this.order)
22+
}
23+
24+
withOrder(order: OrderType | undefined): CollectionSearchCriteria {
25+
return new CollectionSearchCriteria(this.searchText, this.itemTypes, this.sort, order)
1526
}
1627
}

src/collections/domain/models/GetCollectionItemsQueryParams.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,13 @@ export enum GetCollectionItemsQueryParams {
88
START = 'start',
99
TYPE = 'type'
1010
}
11+
12+
export enum SortType {
13+
NAME = 'name',
14+
DATE = 'date'
15+
}
16+
17+
export enum OrderType {
18+
ASC = 'asc',
19+
DESC = 'desc'
20+
}

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ import { transformCollectionUserPermissionsResponseToCollectionUserPermissions }
1313
import { CollectionItemSubset } from '../../domain/models/CollectionItemSubset'
1414
import { CollectionSearchCriteria } from '../../domain/models/CollectionSearchCriteria'
1515
import { CollectionItemType } from '../../domain/models/CollectionItemType'
16-
import { GetCollectionItemsQueryParams } from '../../domain/models/GetCollectionItemsQueryParams'
16+
import {
17+
GetCollectionItemsQueryParams,
18+
OrderType,
19+
SortType
20+
} from '../../domain/models/GetCollectionItemsQueryParams'
1721

1822
export interface NewCollectionRequestPayload {
1923
alias: string
@@ -115,8 +119,8 @@ export class CollectionsRepository extends ApiRepository implements ICollections
115119
const queryParams = new URLSearchParams({
116120
[GetCollectionItemsQueryParams.QUERY]: '*',
117121
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
118-
[GetCollectionItemsQueryParams.SORT]: 'date',
119-
[GetCollectionItemsQueryParams.ORDER]: 'desc'
122+
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
123+
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
120124
})
121125

122126
if (collectionId) {
@@ -204,5 +208,13 @@ export class CollectionsRepository extends ApiRepository implements ICollections
204208
queryParams.append(GetCollectionItemsQueryParams.TYPE, mappedItemType)
205209
})
206210
}
211+
212+
if (collectionSearchCriteria?.sort) {
213+
queryParams.set(GetCollectionItemsQueryParams.SORT, collectionSearchCriteria.sort)
214+
}
215+
216+
if (collectionSearchCriteria?.order) {
217+
queryParams.set(GetCollectionItemsQueryParams.ORDER, collectionSearchCriteria.order)
218+
}
207219
}
208220
}

test/integration/collections/CollectionsRepository.test.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ import { uploadFileViaApi } from '../../testHelpers/files/filesHelper'
2424
import { deleteUnpublishedDatasetViaApi } from '../../testHelpers/datasets/datasetHelper'
2525
import { PublicationStatus } from '../../../src/core/domain/models/PublicationStatus'
2626
import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
27+
import {
28+
OrderType,
29+
SortType
30+
} from '../../../src/collections/domain/models/GetCollectionItemsQueryParams'
2731

2832
describe('CollectionsRepository', () => {
2933
const testCollectionAlias = 'collectionsRepositoryTestCollection'
@@ -525,6 +529,76 @@ describe('CollectionsRepository', () => {
525529
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
526530
expect((actual.items[1] as CollectionPreview).name).toBe(expectedCollectionsName)
527531
expect(actual.facets).toEqual(expectedFacetsFromCollectionAndFile)
532+
533+
// Test sort and order
534+
535+
// Sort by name ascending
536+
const collectionSearchCriteriaNameAscending = new CollectionSearchCriteria()
537+
.withSort(SortType.NAME)
538+
.withOrder(OrderType.ASC)
539+
540+
actual = await sut.getCollectionItems(
541+
testCollectionAlias,
542+
undefined,
543+
undefined,
544+
collectionSearchCriteriaNameAscending
545+
)
546+
expect(actual.items.length).toBe(3)
547+
expect(actual.totalItemCount).toBe(3)
548+
expect((actual.items[0] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
549+
expect((actual.items[1] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
550+
expect((actual.items[2] as FilePreview).type).toBe(CollectionItemType.FILE)
551+
552+
// Sort by name descending
553+
const collectionSearchCriteriaNameDescending = new CollectionSearchCriteria()
554+
.withSort(SortType.NAME)
555+
.withOrder(OrderType.DESC)
556+
557+
actual = await sut.getCollectionItems(
558+
testCollectionAlias,
559+
undefined,
560+
undefined,
561+
collectionSearchCriteriaNameDescending
562+
)
563+
expect(actual.items.length).toBe(3)
564+
expect(actual.totalItemCount).toBe(3)
565+
expect((actual.items[0] as FilePreview).type).toBe(CollectionItemType.FILE)
566+
expect((actual.items[1] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
567+
expect((actual.items[2] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
568+
569+
// Sort by date ascending
570+
const collectionSearchCriteriaDateAscending = new CollectionSearchCriteria()
571+
.withSort(SortType.DATE)
572+
.withOrder(OrderType.ASC)
573+
574+
actual = await sut.getCollectionItems(
575+
testCollectionAlias,
576+
undefined,
577+
undefined,
578+
collectionSearchCriteriaDateAscending
579+
)
580+
expect(actual.items.length).toBe(3)
581+
expect(actual.totalItemCount).toBe(3)
582+
expect((actual.items[0] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
583+
expect((actual.items[1] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
584+
expect((actual.items[2] as FilePreview).type).toBe(CollectionItemType.FILE)
585+
586+
// Sort by date descending
587+
const collectionSearchCriteriaDateDescending = new CollectionSearchCriteria()
588+
.withSort(SortType.DATE)
589+
.withOrder(OrderType.DESC)
590+
591+
actual = await sut.getCollectionItems(
592+
testCollectionAlias,
593+
undefined,
594+
undefined,
595+
collectionSearchCriteriaDateDescending
596+
)
597+
expect(actual.items.length).toBe(3)
598+
expect(actual.totalItemCount).toBe(3)
599+
expect((actual.items[0] as FilePreview).type).toBe(CollectionItemType.FILE)
600+
expect((actual.items[1] as DatasetPreview).type).toBe(CollectionItemType.DATASET)
601+
expect((actual.items[2] as CollectionPreview).type).toBe(CollectionItemType.COLLECTION)
528602
})
529603

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

test/unit/collections/CollectionsRepository.test.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ import {
3131
createCollectionPreviewModel,
3232
createCollectionPreviewPayload
3333
} from '../../testHelpers/collections/collectionPreviewHelper'
34-
import { GetCollectionItemsQueryParams } from '../../../src/collections/domain/models/GetCollectionItemsQueryParams'
34+
import {
35+
GetCollectionItemsQueryParams,
36+
OrderType,
37+
SortType
38+
} from '../../../src/collections/domain/models/GetCollectionItemsQueryParams'
3539
import {
3640
createCollectionItemsFacetsModel,
3741
createCollectionItemsFacetsPayload
@@ -400,8 +404,8 @@ describe('CollectionsRepository', () => {
400404
const expectedRequestParams = new URLSearchParams({
401405
[GetCollectionItemsQueryParams.QUERY]: '*',
402406
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
403-
[GetCollectionItemsQueryParams.SORT]: 'date',
404-
[GetCollectionItemsQueryParams.ORDER]: 'desc'
407+
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
408+
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
405409
})
406410

407411
const expectedRequestConfigApiKey = {
@@ -444,8 +448,8 @@ describe('CollectionsRepository', () => {
444448
const expectedRequestParamsWithPagination = new URLSearchParams({
445449
[GetCollectionItemsQueryParams.QUERY]: '*',
446450
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
447-
[GetCollectionItemsQueryParams.SORT]: 'date',
448-
[GetCollectionItemsQueryParams.ORDER]: 'desc'
451+
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
452+
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
449453
})
450454

451455
expectedRequestParamsWithPagination.set(
@@ -498,8 +502,8 @@ describe('CollectionsRepository', () => {
498502
const expectedRequestParamsWithCollectionId = new URLSearchParams({
499503
[GetCollectionItemsQueryParams.QUERY]: '*',
500504
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
501-
[GetCollectionItemsQueryParams.SORT]: 'date',
502-
[GetCollectionItemsQueryParams.ORDER]: 'desc'
505+
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
506+
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
503507
})
504508

505509
expectedRequestParamsWithCollectionId.set(
@@ -546,8 +550,8 @@ describe('CollectionsRepository', () => {
546550
const expectedRequestParams = new URLSearchParams({
547551
[GetCollectionItemsQueryParams.QUERY]: '*',
548552
[GetCollectionItemsQueryParams.SHOW_FACETS]: 'true',
549-
[GetCollectionItemsQueryParams.SORT]: 'date',
550-
[GetCollectionItemsQueryParams.ORDER]: 'desc'
553+
[GetCollectionItemsQueryParams.SORT]: SortType.DATE,
554+
[GetCollectionItemsQueryParams.ORDER]: OrderType.DESC
551555
})
552556

553557
const expectedRequestConfigApiKey = {

0 commit comments

Comments
 (0)