Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / docs-core / lib / VersionHistory / BatchDocumentUpdates.ts
blobcf1ebb3bcde25e361c4be1af4afe8b51a339e94e
1 import type { VersionHistoryUpdate } from './VersionHistoryBatch'
2 import type { VersionHistoryBatch } from './VersionHistoryBatch'
3 import { Result } from '@proton/docs-shared'
4 import type { SyncUseCaseInterface } from '../Domain/UseCase/SyncUseCaseInterface'
6 /**
7  * BatchDocumentUpdates takes a list of DecryptedMessages and creates batches of them
8  * based on the threshold provided.
9  * For example, if the threshold is 100, and there are 200 updates, the result will be
10  * two batches of 100 updates each.
11  */
12 export class BatchDocumentUpdates implements SyncUseCaseInterface<VersionHistoryBatch[]> {
13   execute(updates: VersionHistoryUpdate[], batchThreshold: number): Result<VersionHistoryBatch[]> {
14     if (!updates.length) {
15       return Result.ok([])
16     }
18     const numberOfBatches = Math.round(updates.length / batchThreshold)
19     const batches: VersionHistoryBatch[] = []
21     for (let batchIndex = 0; batchIndex <= numberOfBatches; batchIndex++) {
22       const start = batchIndex * batchThreshold
23       const nextIndex = batchIndex + 1
24       const end = nextIndex * batchThreshold
25       const batch = updates.slice(start, end)
26       if (batch.length > 0) {
27         batches.push(batch)
28       }
29       if (batch.length < batchThreshold) {
30         break
31       }
32     }
33     return Result.ok(batches)
34   }