Fixed 267U.pre2
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import { generatePaginationData } from "../middleware/pagination.js";
|
||||
export class PaginationHelpers {
|
||||
static makePaginationQuery(q, sinceId, maxId, minId, idField = `${q.alias}.id`) {
|
||||
if (sinceId && minId) throw new Error("Can't user both sinceId and minId params");
|
||||
if (sinceId && maxId) {
|
||||
q.andWhere(`${idField} > :sinceId`, {
|
||||
sinceId: sinceId
|
||||
});
|
||||
q.andWhere(`${idField} < :maxId`, {
|
||||
maxId: maxId
|
||||
});
|
||||
q.orderBy(`${idField}`, "DESC");
|
||||
}
|
||||
if (minId && maxId) {
|
||||
q.andWhere(`${idField} > :minId`, {
|
||||
minId: minId
|
||||
});
|
||||
q.andWhere(`${idField} < :maxId`, {
|
||||
maxId: maxId
|
||||
});
|
||||
q.orderBy(`${idField}`, "ASC");
|
||||
} else if (sinceId) {
|
||||
q.andWhere(`${idField} > :sinceId`, {
|
||||
sinceId: sinceId
|
||||
});
|
||||
q.orderBy(`${idField}`, "DESC");
|
||||
} else if (minId) {
|
||||
q.andWhere(`${idField} > :minId`, {
|
||||
minId: minId
|
||||
});
|
||||
q.orderBy(`${idField}`, "ASC");
|
||||
} else if (maxId) {
|
||||
q.andWhere(`${idField} < :maxId`, {
|
||||
maxId: maxId
|
||||
});
|
||||
q.orderBy(`${idField}`, "DESC");
|
||||
} else {
|
||||
q.orderBy(`${idField}`, "DESC");
|
||||
}
|
||||
return q;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param query
|
||||
* @param limit
|
||||
* @param reverse whether the result needs to be .reverse()'d. Set this to true when the parameter minId is not undefined in the original request.
|
||||
*/ static async execQuery(query, limit, reverse) {
|
||||
return query.take(limit).getMany().then((found)=>reverse ? found.reverse() : found);
|
||||
}
|
||||
static async execQueryLinkPagination(query, limit, reverse, ctx) {
|
||||
return this.execQuery(query, limit, reverse).then((p)=>{
|
||||
ctx.pagination = generatePaginationData(p.map((x)=>x.id), limit);
|
||||
return p;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user