clonegur/backend/server/decorators/page.ts

39 lines
1.1 KiB
TypeScript

import { makeParameterModifier } from "../Router.ts";
import { FindCursor } from "https://deno.land/x/mongo@v0.31.2/src/collection/commands/find.ts";
export class Page {
public size?: number;
public index?: number;
public apply<T>(cursor: FindCursor<T>) {
let res = cursor;
if (this.size !== undefined) {
if (this.index !== undefined) res = res.skip(this.index * this.size);
res = res.limit(this.size);
}
return res;
}
public constructor(size?: number);
public constructor(size: number, index?: number);
public constructor(size?: number, index?: number) {
this.size = size;
this.index = index;
}
}
export default function page() {
return makeParameterModifier(req => {
let n: number | undefined = Number.parseInt(req.params.n);
let i: number | undefined = Number.parseInt(req.params.i);
if (isNaN(n) || n < 1) n = undefined;
if (isNaN(i) || i < 0) i = undefined;
if (n === undefined) return new Page();
else if (i === undefined) return new Page(n);
else return new Page(n, i);
});
}