✨ [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) {}
|
constructor(public type: any, public min: number, public max: number) {}
|
||||||
|
|
||||||
check(value: string) {
|
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