import type { Meta } from '@nextgenleads/dnc'; import type { Model, FindOptions, Attributes } from 'sequelize/types'; /** Parse provided model and compile pagination data & query mixin */ export function parseGRPCPagination( options: FindOptions>, params: { count: number; page: number; limit: number; skip?: number } ) { const start = params.page * params.limit + (params.skip || 0); const end = start + params.limit; const pagination: Meta.Query_Pagination = { count: params.count, pages: Math.ceil(params.count / params.limit), next_page: end < params.count, prev_page: start > 0, // Page is 1-index on submission, we use as 0-index current_page: params.page + 1, limit: params.limit, offset: params.skip, }; if (options.group) throw new Error('Unable to paginate groupings'); const result = { ...options, offset: start, limit: params.limit, }; return { result, pagination }; }