import { client } from './connection'; import type { Meta } from '@nextgenleads/dnc'; export async function paginate( sql: string, params: { page: number; limit: number; skip?: number } ): Promise<{ result: T; pagination: Meta.Query_Pagination }> { const count_result = (await client.query(`SELECT COUNT(s.*) count FROM (${sql}) s`)) as [ [{ count: number }], unknown ]; const count = count_result[0][0].count; const start = params.page * params.limit + (params.skip || 0); const end = start + params.limit; const pagination: Meta.Query_Pagination = { count, pages: Math.ceil(count / params.limit), next_page: end < 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, }; const result = (await client.query(`${sql} OFFSET ${start} LIMIT ${params.limit}`)) as [T, unknown]; return { result: result[0], pagination }; }