const getFilterSql = <TColumn extends AnyPgColumn>(
filter: string,
filterableColumns: TColumn[],
) => {
if (!filter || filter.trim() === '') return or();
return or(...filterableColumns.map((c) => ilike(c, `%${filter}%`)));
};
export const paginatedQuery = <TTable extends AnyPgTable>(
context: PgDatabase<NodePgQueryResultHKT>,
table: TTable,
paginationDto: PaginationDto,
filterableColumns: (/* Not too sure what to put here */)[],
defaultWhere?: SQL,
) => {
return context
.select()
.from(table)
.where(
and(defaultWhere, getFilterSql(paginationDto.filter, filterableColumns)), // TypeScript gives an error here
)
.offset(paginationDto.page * paginationDto.pageSize)
.limit(paginationDto.pageSize);
};
const getFilterSql = <TColumn extends AnyPgColumn>(
filter: string,
filterableColumns: TColumn[],
) => {
if (!filter || filter.trim() === '') return or();
return or(...filterableColumns.map((c) => ilike(c, `%${filter}%`)));
};
export const paginatedQuery = <TTable extends AnyPgTable>(
context: PgDatabase<NodePgQueryResultHKT>,
table: TTable,
paginationDto: PaginationDto,
filterableColumns: (/* Not too sure what to put here */)[],
defaultWhere?: SQL,
) => {
return context
.select()
.from(table)
.where(
and(defaultWhere, getFilterSql(paginationDto.filter, filterableColumns)), // TypeScript gives an error here
)
.offset(paginationDto.page * paginationDto.pageSize)
.limit(paginationDto.pageSize);
};