30 lines
872 B
TypeScript
30 lines
872 B
TypeScript
|
|
import { Injectable } from '@nestjs/common'
|
||
|
|
|
||
|
|
@Injectable()
|
||
|
|
export class SharedSaleInvoicePaginationService {
|
||
|
|
normalize(
|
||
|
|
page: number = 1,
|
||
|
|
perPage: number = 10,
|
||
|
|
defaultPerPage: number = 10,
|
||
|
|
maxPerPage: number = 50,
|
||
|
|
) {
|
||
|
|
const normalizedPageValue = Number(page ?? 1)
|
||
|
|
const normalizedPage = Number.isFinite(normalizedPageValue)
|
||
|
|
? Math.max(1, Math.floor(normalizedPageValue))
|
||
|
|
: 1
|
||
|
|
|
||
|
|
const requestedPerPageValue = Number(perPage ?? defaultPerPage)
|
||
|
|
const requestedPerPage = Number.isFinite(requestedPerPageValue)
|
||
|
|
? Math.max(1, Math.floor(requestedPerPageValue))
|
||
|
|
: defaultPerPage
|
||
|
|
const normalizedPerPage = Math.min(requestedPerPage, maxPerPage)
|
||
|
|
|
||
|
|
return {
|
||
|
|
page: normalizedPage,
|
||
|
|
perPage: normalizedPerPage,
|
||
|
|
skip: (normalizedPage - 1) * normalizedPerPage,
|
||
|
|
take: normalizedPerPage,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|