| 123456789101112131415161718192021222324252627282930313233 |
- import { LucidModel } from '@ioc:Adonis/Lucid/Orm'
- export default class PaginationService {
- protected model: LucidModel
- constructor(model: LucidModel) {
- this.model = model
- }
- public async paginate(query: any) {
- let q = this.model.query()
- Object.keys(query).forEach((key) => {
- if (key === 'page' || key === 'pageSize') {
- return
- }
- if (this.model.$hasColumn(key)) {
- q.where(key, query[key])
- }
- })
- let orders: { column: string; order: 'asc' | 'desc' }[] = []
- if (query.orderBy) {
- query.orderBy.split(';').forEach((e) => {
- let [column, order] = e.split(',')
- if (this.model.$hasColumn(column)) {
- orders.push({ column, order: order || 'asc' })
- }
- })
- }
- if (orders.length === 0 && this.model.$hasColumn('createdAt')) {
- orders.push({ column: 'createdAt', order: 'desc' })
- }
- q.orderBy(orders)
- return await q.paginate(query.page || 1, query.pageSize || 20)
- }
- }
|