✨ [Member] pagination
This commit is contained in:
parent
0d1f795305
commit
e894389732
4
src/routes/api/v8/channels/#CHANNELID/webhooks.ts
Normal file
4
src/routes/api/v8/channels/#CHANNELID/webhooks.ts
Normal file
@ -0,0 +1,4 @@
|
||||
import { Router } from "express";
|
||||
const router: Router = Router();
|
||||
|
||||
export default router;
|
@ -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;
|
36
src/routes/api/v8/guilds/#id/members/index.ts
Normal file
36
src/routes/api/v8/guilds/#id/members/index.ts
Normal 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;
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user