import type { SelectQueryBuilder } from "typeorm"; export function makePaginationQuery( q: SelectQueryBuilder, sinceId?: string, untilId?: string, sinceDate?: number, untilDate?: number, ) { if (sinceId && untilId) { q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: sinceId }); q.andWhere(`${q.alias}.id < :untilId`, { untilId: untilId }); q.orderBy(`${q.alias}.id`, "DESC"); } else if (sinceId) { q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: sinceId }); q.orderBy(`${q.alias}.id`, "ASC"); } else if (untilId) { q.andWhere(`${q.alias}.id < :untilId`, { untilId: untilId }); q.orderBy(`${q.alias}.id`, "DESC"); } else if (sinceDate && untilDate) { q.andWhere(`${q.alias}.createdAt > :sinceDate`, { sinceDate: new Date(sinceDate), }); q.andWhere(`${q.alias}.createdAt < :untilDate`, { untilDate: new Date(untilDate), }); q.orderBy(`${q.alias}.createdAt`, "DESC"); } else if (sinceDate) { q.andWhere(`${q.alias}.createdAt > :sinceDate`, { sinceDate: new Date(sinceDate), }); q.orderBy(`${q.alias}.createdAt`, "ASC"); } else if (untilDate) { q.andWhere(`${q.alias}.createdAt < :untilDate`, { untilDate: new Date(untilDate), }); q.orderBy(`${q.alias}.createdAt`, "DESC"); } else { q.orderBy(`${q.alias}.id`, "DESC"); } return q; }