refactor: add Pagination class

This commit is contained in:
Chen, Tai-Lin committed 2023-12-21 17:09:20 +08:00
1 parent 19cd10ab7b
commit 68db16419d
9 files changed
+99 -89

No files matched your search

@@ -0,0 +1,42 @@
/* eslint-disable lines-between-class-members */
/* eslint-disable class-methods-use-this */
// eslint-disable-next-line max-classes-per-file
import mongoose from 'mongoose'
class Pagination {
nextKey = null
itemsPerPage = 50
constructor(itemsPerPage = 50, nextKey = null) {
this.itemsPerPage = itemsPerPage
if (nextKey) {
this.nextKey = new mongoose.Types.ObjectId(nextKey)
}
}
limit() {
return { $limit: this.itemsPerPage }
}
}
export class Asc extends Pagination {
matchStage(field) {
const stage = this.nextKey ? { [field]: { $gt: this.nextKey } } : {}
return { $match: stage }
}
order(field) {
return { $sort: { [field]: 1 } }
}
}
export class Desc extends Pagination {
matchStage(field) {
const stage = this.nextKey ? { [field]: { $lt: this.nextKey } } : {}
return { $match: stage }
}
order(field) {
return { $sort: { [field]: -1 } }
}
}