summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-02-22 17:33:41 +0100
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-02-22 17:33:41 +0100
commite8943897324674c030f81a7404b779c9449286b4 (patch)
treede5fee254787117342b8e3e61628c8d2ec917c83
parent:art: restructed guilds (diff)
downloadserver-e8943897324674c030f81a7404b779c9449286b4.tar.xz
:sparkles: [Member] pagination
-rw-r--r--src/routes/api/v8/channels/#CHANNELID/webhooks.ts4
-rw-r--r--src/routes/api/v8/guilds/#id/members.ts16
-rw-r--r--src/routes/api/v8/guilds/#id/members/index.ts36
-rw-r--r--src/util/instanceOf.ts4
4 files changed, 43 insertions, 17 deletions
diff --git a/src/routes/api/v8/channels/#CHANNELID/webhooks.ts b/src/routes/api/v8/channels/#CHANNELID/webhooks.ts
new file mode 100644

index 00000000..9a4e81fa --- /dev/null +++ b/src/routes/api/v8/channels/#CHANNELID/webhooks.ts
@@ -0,0 +1,4 @@ +import { Router } from "express"; +const router: Router = Router(); + +export default router; diff --git a/src/routes/api/v8/guilds/#id/members.ts b/src/routes/api/v8/guilds/#id/members.ts deleted file mode 100644
index 68434830..00000000 --- a/src/routes/api/v8/guilds/#id/members.ts +++ /dev/null
@@ -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; diff --git a/src/routes/api/v8/guilds/#id/members/index.ts b/src/routes/api/v8/guilds/#id/members/index.ts new file mode 100644
index 00000000..4b34dc8d --- /dev/null +++ b/src/routes/api/v8/guilds/#id/members/index.ts
@@ -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; diff --git a/src/util/instanceOf.ts b/src/util/instanceOf.ts
index cc373ec1..be7124d4 100644 --- a/src/util/instanceOf.ts +++ b/src/util/instanceOf.ts
@@ -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; } }