[Member] pagination

This commit is contained in:
Flam3rboy 2021-02-22 17:33:41 +01:00
parent 0d1f795305
commit e894389732
4 changed files with 43 additions and 17 deletions

View File

@ -0,0 +1,4 @@
import { Router } from "express";
const router: Router = Router();
export default router;

View File

@ -1,16 +0,0 @@
import { Request, Response, Router } from "express";
import { GuildModel, MemberModel } from "fosscord-server-util";
import { HTTPError } from "lambert-server";
const router = Router();
// TODO: needs pagination/only send over websocket
router.get("/:id/members", async (req: Request, res: Response) => {
const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec();
if (!guild) throw new HTTPError("Guild not found", 404);
var members = await MemberModel.find({ guild_id: BigInt(req.params.id) }).exec();
return res.json(members);
});
export default router;

View File

@ -0,0 +1,36 @@
import { Request, Response, Router } from "express";
import { GuildModel, MemberModel } from "fosscord-server-util";
import { HTTPError } from "lambert-server";
import { instanceOf, Length } from "../../../../../../util/instanceOf";
const router = Router();
// TODO: privileged intents
// TODO: needs pagination/only send over websocket
router.get("/", async (req: Request, res: Response) => {
const guild_id = BigInt(req.params.id);
const guild = await GuildModel.findOne({ id: guild_id }).exec();
if (!guild) throw new HTTPError("Guild not found", 404);
try {
instanceOf({ $limit: new Length(Number, 1, 1000), $after: BigInt }, req.query, {
path: "query",
req,
ref: { obj: null, key: "" },
});
} catch (error) {
return res.status(400).json({ code: 50035, message: "Invalid Form Body", success: false, errors: error });
}
// @ts-ignore
if (!req.query.limit) req.query.limit = 1;
const { limit, after } = (<unknown>req.query) as { limit: number; after: bigint };
const query = after ? { id: { $gt: after } } : {};
var members = await MemberModel.find({ guild_id, ...query })
.limit(limit)
.exec();
return res.json(members);
});
export default router;

View File

@ -51,7 +51,9 @@ export class Length {
constructor(public type: any, public min: number, public max: number) {}
check(value: string) {
return value.length >= this.min && value.length <= this.max;
if (typeof value === "string") return value.length >= this.min && value.length <= this.max;
if (typeof value === "number" || typeof value === "bigint") return value >= this.min && value <= this.max;
return false;
}
}