interface FieldOrder<TTableFields extends string | number> {
field: TTableFields;
order: "asc" | "desc";
}
// This is a method in the class
findAllPaginated(
page: number,
pageSize: number,
orderBy?: FieldOrder<keyof InferSelectModel<TTable>>[],
): Promise<InferSelectModel<TTable>[]> {
const customOrderBy = orderBy?.map(({ field, order }) => {
// this part right here
const sqlField = this.table[field];
return order === "desc" ? desc(sqlField) : asc(sqlField);
});
const defaultOrderBy = [desc(this.sqlCreatedAt)];
return this.database
.select()
.from(this.table)
.where(this.isNotDeleted)
.orderBy(...(customOrderBy ?? defaultOrderBy))
.limit(pageSize)
.offset(pageSize * (page - 1)) as Promise<InferSelectModel<TTable>[]>;
}
interface FieldOrder<TTableFields extends string | number> {
field: TTableFields;
order: "asc" | "desc";
}
// This is a method in the class
findAllPaginated(
page: number,
pageSize: number,
orderBy?: FieldOrder<keyof InferSelectModel<TTable>>[],
): Promise<InferSelectModel<TTable>[]> {
const customOrderBy = orderBy?.map(({ field, order }) => {
// this part right here
const sqlField = this.table[field];
return order === "desc" ? desc(sqlField) : asc(sqlField);
});
const defaultOrderBy = [desc(this.sqlCreatedAt)];
return this.database
.select()
.from(this.table)
.where(this.isNotDeleted)
.orderBy(...(customOrderBy ?? defaultOrderBy))
.limit(pageSize)
.offset(pageSize * (page - 1)) as Promise<InferSelectModel<TTable>[]>;
}