Skip to content

Commit 4ca712f

Browse files
committed
add pagination query para
1 parent 406416c commit 4ca712f

File tree

9 files changed

+165
-11
lines changed

9 files changed

+165
-11
lines changed

docs/useCases.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,9 @@ getDatasetVersionsSummaries
858858

859859
_See [use case](../src/datasets/domain/useCases/GetDatasetVersionsSummaries.ts) implementation_.
860860

861-
The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
861+
- The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
862+
- **limit**: (number) Limit for pagination.
863+
- **offset**: (number) Offset for pagination.
862864

863865
#### Get Dataset Linked Collections
864866

@@ -1984,6 +1986,9 @@ getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionS
19841986

19851987
_See [use case](../src/files/domain/useCases/GetFileVersionSummaries.ts) implementation_.
19861988

1989+
- **limit**: (number) Limit for pagination.
1990+
- **offset**: (number) Offset for pagination.
1991+
19871992
## Metadata Blocks
19881993

19891994
### Metadata Blocks read use cases

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ export interface IDatasetsRepository {
6666
datasetId: number | string,
6767
includeMDC?: boolean
6868
): Promise<DatasetDownloadCount>
69-
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
69+
getDatasetVersionsSummaries(
70+
datasetId: number | string,
71+
limit?: number,
72+
offset?: number
73+
): Promise<DatasetVersionSummaryInfo[]>
7074
deleteDatasetDraft(datasetId: number | string): Promise<void>
7175
linkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
7276
unlinkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>

src/datasets/domain/useCases/GetDatasetVersionsSummaries.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,15 @@ export class GetDatasetVersionsSummaries implements UseCase<DatasetVersionSummar
1414
* Draft versions will only be available to users who have permission to view unpublished drafts.
1515
*
1616
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
17+
* @param {number} [limit] - Limit for pagination (optional).
18+
* @param {number} [offset] - Offset for pagination (optional).
1719
* @returns {Promise<DatasetVersionSummaryInfo[]>} - An array of DatasetVersionSummaryInfo.
1820
*/
19-
async execute(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
20-
return await this.datasetsRepository.getDatasetVersionsSummaries(datasetId)
21+
async execute(
22+
datasetId: number | string,
23+
limit?: number,
24+
offset?: number
25+
): Promise<DatasetVersionSummaryInfo[]> {
26+
return await this.datasetsRepository.getDatasetVersionsSummaries(datasetId, limit, offset)
2127
}
2228
}

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,11 +306,19 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
306306
}
307307

308308
public async getDatasetVersionsSummaries(
309-
datasetId: string | number
309+
datasetId: string | number,
310+
limit?: number,
311+
offset?: number
310312
): Promise<DatasetVersionSummaryInfo[]> {
313+
const queryParams: { per_page?: string; start?: string } = {}
314+
315+
limit && (queryParams.per_page = limit.toString())
316+
offset && (queryParams.start = offset.toString())
317+
311318
return this.doGet(
312319
this.buildApiEndpoint(this.datasetsResourceName, 'versions/compareSummary', datasetId),
313-
true
320+
true,
321+
queryParams
314322
)
315323
.then((response) => response.data.data)
316324
.catch((error) => {

src/files/domain/repositories/IFilesRepository.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,11 @@ export interface IFilesRepository {
8888
replace?: boolean
8989
): Promise<void>
9090

91-
getFileVersionSummaries(fileId: number | string): Promise<FileVersionSummaryInfo[]>
91+
getFileVersionSummaries(
92+
fileId: number | string,
93+
limit?: number,
94+
offset?: number
95+
): Promise<FileVersionSummaryInfo[]>
9296

9397
isFileDeleted(fileId: number | string): Promise<boolean>
9498
}

src/files/domain/useCases/GetFileVersionSummaries.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ export class GetFileVersionSummaries implements UseCase<FileVersionSummaryInfo[]
1313
* Returns a list of versions for a given file including a summary of differences between consecutive versions
1414
*
1515
* @param {number | string} [fileId] - The file identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
16+
* @param {number} [limit] - Limit for pagination (optional).
17+
* @param {number} [offset] - Offset for pagination (optional).
1618
* @returns {Promise<FileVersionSummaryInfo[]>} - An array of FileVersionSummaryInfo.
1719
*/
18-
async execute(fileId: number | string): Promise<FileVersionSummaryInfo[]> {
19-
return await this.filesRepository.getFileVersionSummaries(fileId)
20+
async execute(
21+
fileId: number | string,
22+
limit?: number,
23+
offset?: number
24+
): Promise<FileVersionSummaryInfo[]> {
25+
return await this.filesRepository.getFileVersionSummaries(fileId, limit, offset)
2026
}
2127
}

src/files/infra/repositories/FilesRepository.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,10 +423,20 @@ export class FilesRepository extends ApiRepository implements IFilesRepository {
423423
})
424424
}
425425

426-
public async getFileVersionSummaries(fileId: number | string): Promise<FileVersionSummaryInfo[]> {
426+
public async getFileVersionSummaries(
427+
fileId: number | string,
428+
limit?: number,
429+
offset?: number
430+
): Promise<FileVersionSummaryInfo[]> {
431+
const queryParams: { per_page?: string; start?: string } = {}
432+
433+
limit && (queryParams.per_page = limit.toString())
434+
offset && (queryParams.start = offset.toString())
435+
427436
return this.doGet(
428437
this.buildApiEndpoint(this.filesResourceName, 'versionDifferences', fileId),
429-
true
438+
true,
439+
queryParams
430440
)
431441
.then((response) => transformFileVersionSummaryInfoResponseToFileVersionSummaryInfo(response))
432442
.catch((error) => {

test/integration/datasets/DatasetsRepository.test.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1482,6 +1482,65 @@ describe('DatasetsRepository', () => {
14821482
expectedError
14831483
)
14841484
})
1485+
1486+
test('should return dataset versions summaries with pagination', async () => {
1487+
const testDatasetIds = await createDataset.execute(
1488+
TestConstants.TEST_NEW_DATASET_DTO,
1489+
testDatasetVersionsCollectionAlias
1490+
)
1491+
1492+
await publishDataset.execute(testDatasetIds.numericId, VersionUpdateType.MAJOR)
1493+
await waitForNoLocks(testDatasetIds.numericId, 10)
1494+
1495+
const metadataBlocksRepository = new MetadataBlocksRepository()
1496+
const citationMetadataBlock = await metadataBlocksRepository.getMetadataBlockByName(
1497+
'citation'
1498+
)
1499+
1500+
for (let i = 1; i <= 21; i++) {
1501+
await sut.updateDataset(
1502+
testDatasetIds.numericId,
1503+
{
1504+
metadataBlockValues: [
1505+
{
1506+
name: 'citation',
1507+
fields: {
1508+
title: `Updated Dataset Title - Version ${i}`
1509+
}
1510+
}
1511+
]
1512+
},
1513+
[citationMetadataBlock]
1514+
)
1515+
1516+
await publishDataset.execute(testDatasetIds.numericId, VersionUpdateType.MINOR)
1517+
await waitForNoLocks(testDatasetIds.numericId, 10)
1518+
}
1519+
1520+
const firstPage = await sut.getDatasetVersionsSummaries(testDatasetIds.numericId, 5, 0)
1521+
1522+
expect(firstPage.length).toBe(5)
1523+
expect(firstPage[0].versionNumber).toBe('1.21')
1524+
expect(firstPage[4].versionNumber).toBe('1.17')
1525+
1526+
// Test pagination with limit=5, offset=5 (second page)
1527+
const secondPage = await sut.getDatasetVersionsSummaries(testDatasetIds.numericId, 5, 5)
1528+
expect(secondPage.length).toBe(5)
1529+
expect(secondPage[0].versionNumber).toBe('1.16')
1530+
expect(secondPage[4].versionNumber).toBe('1.12')
1531+
1532+
// Test pagination with limit=5, offset=10 (third page)
1533+
const thirdPage = await sut.getDatasetVersionsSummaries(testDatasetIds.numericId, 5, 10)
1534+
expect(thirdPage.length).toBe(5)
1535+
expect(thirdPage[0].versionNumber).toBe('1.11')
1536+
expect(thirdPage[4].versionNumber).toBe('1.7')
1537+
1538+
// Test that all versions are returned without pagination
1539+
const allVersions = await sut.getDatasetVersionsSummaries(testDatasetIds.numericId)
1540+
expect(allVersions.length).toBe(22) // 1 initial + 21 updates
1541+
1542+
await deletePublishedDatasetViaApi(testDatasetIds.persistentId)
1543+
}, 180000)
14851544
})
14861545

14871546
describe('getDatasetDownloadCount', () => {

test/integration/files/FilesRepository.test.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,58 @@ describe('FilesRepository', () => {
10471047
deletePublishedDatasetViaApi(fileTestDatasetIds.persistentId)
10481048
})
10491049

1050+
test('should return file version summaries with pagination', async () => {
1051+
// Create a new dataset and upload a file
1052+
const paginationTestDatasetIds = await createDataset.execute(
1053+
TestConstants.TEST_NEW_DATASET_DTO
1054+
)
1055+
await uploadFileViaApi(paginationTestDatasetIds.numericId, testTextFile1Name)
1056+
1057+
// Publish initial version (creates version 1.0)
1058+
await publishDatasetViaApi(paginationTestDatasetIds.numericId)
1059+
await waitForNoLocks(paginationTestDatasetIds.numericId, 10)
1060+
1061+
// Get the file ID
1062+
const datasetFiles = await sut.getDatasetFiles(
1063+
paginationTestDatasetIds.numericId,
1064+
latestDatasetVersionId,
1065+
false,
1066+
FileOrderCriteria.NAME_AZ
1067+
)
1068+
const paginationTestFile = datasetFiles.files[0]
1069+
1070+
for (let i = 1; i <= 21; i++) {
1071+
await sut.updateFileMetadata(paginationTestFile.id, {
1072+
description: `File description update ${i}`,
1073+
label: `updated-file-${i}.txt`
1074+
})
1075+
1076+
await publishDatasetViaApi(paginationTestDatasetIds.numericId)
1077+
await waitForNoLocks(paginationTestDatasetIds.numericId, 10)
1078+
}
1079+
1080+
const firstPage = await sut.getFileVersionSummaries(paginationTestFile.id, 5, 0)
1081+
1082+
expect(firstPage.length).toBe(5)
1083+
expect(firstPage[0].datasetVersion).toBe('1.21')
1084+
expect(firstPage[4].datasetVersion).toBe('1.17')
1085+
1086+
const secondPage = await sut.getFileVersionSummaries(paginationTestFile.id, 5, 5)
1087+
expect(secondPage.length).toBe(5)
1088+
expect(secondPage[0].datasetVersion).toBe('1.16')
1089+
expect(secondPage[4].datasetVersion).toBe('1.12')
1090+
1091+
const thirdPage = await sut.getFileVersionSummaries(paginationTestFile.id, 5, 10)
1092+
expect(thirdPage.length).toBe(5)
1093+
expect(thirdPage[0].datasetVersion).toBe('1.11')
1094+
expect(thirdPage[4].datasetVersion).toBe('1.7')
1095+
1096+
const allVersions = await sut.getFileVersionSummaries(paginationTestFile.id)
1097+
expect(allVersions.length).toBe(22)
1098+
1099+
await deletePublishedDatasetViaApi(paginationTestDatasetIds.persistentId)
1100+
}, 180000)
1101+
10501102
test('should return error when file does not exist', async () => {
10511103
const expectedError = new ReadError(`[404] File with ID ${nonExistentFiledId} not found.`)
10521104

0 commit comments

Comments
 (0)