Skip to content

Commit 4223fa2

Browse files
add date range for changes endpoint
1 parent 8194fd7 commit 4223fa2

2 files changed

Lines changed: 34 additions & 0 deletions

File tree

packages/apollo-collaboration-server/src/changes/changes.service.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,28 @@ export class ChangesService {
274274
queryCond.sequence = { $gt: Number(changeFilter.since) }
275275
delete queryCond.since
276276
}
277+
278+
if (changeFilter.createdAfter) {
279+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
280+
const createdAfterDate = new Date(changeFilter.createdAfter)
281+
if (Number.isNaN(createdAfterDate.getTime())) {
282+
throw new UnprocessableEntityException(
283+
'createdAfter must be a valid date string',
284+
)
285+
}
286+
287+
// Return only changes created on/after this date.
288+
queryCond.createdAt = {
289+
$gte: createdAfterDate,
290+
}
291+
delete queryCond.createdAfter
292+
}
293+
delete queryCond.createdBefore
294+
295+
delete queryCond.limit
296+
delete queryCond.sort
297+
delete queryCond.offset
298+
277299
this.logger.debug(`Search criteria: "${JSON.stringify(queryCond)}"`)
278300

279301
let sortOrder: 1 | -1 = -1
@@ -289,6 +311,15 @@ export class ChangesService {
289311
if (changeFilter.limit) {
290312
changeCursor = changeCursor.limit(Number(changeFilter.limit))
291313
}
314+
if (changeFilter.offset) {
315+
const offset = Number(changeFilter.offset)
316+
if (!Number.isInteger(offset) || offset < 0) {
317+
throw new UnprocessableEntityException(
318+
'offset must be an integer greater than or equal to 0',
319+
)
320+
}
321+
changeCursor = changeCursor.skip(offset)
322+
}
292323
const change = await changeCursor.exec()
293324

294325
if (!change) {

packages/apollo-collaboration-server/src/changes/dto/find-change.dto.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ export class FindChangeDto {
55
readonly user?: string
66
readonly typeName?: string
77
readonly since?: string
8+
// Timestamp lower bound for createdAt (ISO string recommended)
9+
readonly createdAfter?: string
810
readonly sort?: string
911
readonly limit?: string
12+
readonly offset?: string
1013
}

0 commit comments

Comments
 (0)