summary refs log tree commit diff
path: root/api/src/routes/guilds/#guild_id/members
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/routes/guilds/#guild_id/members')
-rw-r--r--api/src/routes/guilds/#guild_id/members/#member_id/index.ts27
-rw-r--r--api/src/routes/guilds/#guild_id/members/#member_id/nick.ts5
-rw-r--r--api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts7
-rw-r--r--api/src/routes/guilds/#guild_id/members/index.ts21
4 files changed, 32 insertions, 28 deletions
diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts
index 1dacbdad..db29cd08 100644
--- a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts
+++ b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts
@@ -3,7 +3,6 @@ import {
 	Guild,
 	Member,
 	User,
-	toObject,
 	GuildMemberAddEvent,
 	getPermission,
 	PermissionResolvable,
@@ -12,15 +11,15 @@ import {
 	emitEvent
 } from "@fosscord/util";
 import { HTTPError } from "lambert-server";
-import { addMember, isMember, removeMember } from "../../../../../util/Member";
 import { check } from "../../../../../util/instanceOf";
 import { MemberChangeSchema } from "../../../../../schema/Member";
+import { In } from "typeorm";
 
 const router = Router();
 
 router.get("/", async (req: Request, res: Response) => {
 	const { guild_id, member_id } = req.params;
-	await isMember(req.user_id, guild_id);
+	await Member.IsInGuildOrFail(req.user_id, guild_id);
 
 	const member = await Member.findOneOrFail({ id: member_id, guild_id });
 
@@ -31,18 +30,22 @@ router.patch("/", check(MemberChangeSchema), async (req: Request, res: Response)
 	const { guild_id, member_id } = req.params;
 	const body = req.body as MemberChangeSchema;
 	if (body.roles) {
-		const roles = await Role.find({ id: { $in: body.roles } });
+		const roles = await Role.find({ id: In(body.roles) });
 		if (body.roles.length !== roles.length) throw new HTTPError("Roles not found", 404);
 		// TODO: check if user has permission to add role
 	}
 
-	const member = await Member.findOneOrFailAndUpdate({ id: member_id, guild_id }, body, { new: true });
+	const member = await Member.findOneOrFail({ id: member_id, guild_id });
+	member.assign(req.body);
 
-	await emitEvent({
-		event: "GUILD_MEMBER_UPDATE",
-		guild_id,
-		data: member
-	} as GuildMemberUpdateEvent);
+	Promise.all([
+		member.save(),
+		emitEvent({
+			event: "GUILD_MEMBER_UPDATE",
+			guild_id,
+			data: { ...member, roles: member.role_ids }
+		} as GuildMemberUpdateEvent)
+	]);
 
 	res.json(member);
 });
@@ -52,7 +55,7 @@ router.put("/", async (req: Request, res: Response) => {
 
 	throw new HTTPError("Maintenance: Currently you can't add a member", 403);
 	// TODO: only for oauth2 applications
-	await addMember(member_id, guild_id);
+	await Member.addToGuild(member_id, guild_id);
 	res.sendStatus(204);
 });
 
@@ -62,7 +65,7 @@ router.delete("/", async (req: Request, res: Response) => {
 	const perms = await getPermission(req.user_id, guild_id);
 	perms.hasThrow("KICK_MEMBERS");
 
-	await removeMember(member_id, guild_id);
+	await Member.removeFromGuild(member_id, guild_id);
 	res.sendStatus(204);
 });
 
diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts b/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts
index e4308364..3f2975e6 100644
--- a/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts
+++ b/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts
@@ -1,8 +1,7 @@
-import { getPermission, PermissionResolvable } from "@fosscord/util";
+import { getPermission, Member, PermissionResolvable } from "@fosscord/util";
 import { Request, Response, Router } from "express";
 import { check } from "lambert-server";
 import { MemberNickChangeSchema } from "../../../../../schema/Member";
-import { changeNickname } from "../../../../../util/Member";
 
 const router = Router();
 
@@ -17,7 +16,7 @@ router.patch("/", check(MemberNickChangeSchema), async (req: Request, res: Respo
 	const perms = await getPermission(req.user_id, guild_id);
 	perms.hasThrow(permissionString);
 
-	await changeNickname(member_id, guild_id, req.body.nick);
+	await Member.changeNickname(member_id, guild_id, req.body.nick);
 	res.status(200).send();
 });
 
diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts
index fad0695e..cb9bad9a 100644
--- a/api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts
+++ b/api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts
@@ -1,6 +1,5 @@
-import { getPermission } from "@fosscord/util";
+import { getPermission, Member } from "@fosscord/util";
 import { Request, Response, Router } from "express";
-import { addRole, removeRole } from "../../../../../../../util/Member";
 
 const router = Router();
 
@@ -10,7 +9,7 @@ router.delete("/:member_id/roles/:role_id", async (req: Request, res: Response)
 	const perms = await getPermission(req.user_id, guild_id);
 	perms.hasThrow("MANAGE_ROLES");
 
-	await removeRole(member_id, guild_id, role_id);
+	await Member.removeRole(member_id, guild_id, role_id);
 	res.sendStatus(204);
 });
 
@@ -20,7 +19,7 @@ router.put("/:member_id/roles/:role_id", async (req: Request, res: Response) =>
 	const perms = await getPermission(req.user_id, guild_id);
 	perms.hasThrow("MANAGE_ROLES");
 
-	await addRole(member_id, guild_id, role_id);
+	await Member.addRole(member_id, guild_id, role_id);
 	res.sendStatus(204);
 });
 
diff --git a/api/src/routes/guilds/#guild_id/members/index.ts b/api/src/routes/guilds/#guild_id/members/index.ts
index 656d3acd..0bfd71cb 100644
--- a/api/src/routes/guilds/#guild_id/members/index.ts
+++ b/api/src/routes/guilds/#guild_id/members/index.ts
@@ -1,8 +1,7 @@
 import { Request, Response, Router } from "express";
-import { Guild, Member, toObject } from "@fosscord/util";
-import { HTTPError } from "lambert-server";
+import { Guild, Member, PublicMemberProjection } from "@fosscord/util";
 import { instanceOf, Length } from "../../../../util/instanceOf";
-import { PublicMemberProjection, isMember } from "../../../../util/Member";
+import { MoreThan } from "typeorm";
 
 const router = Router();
 
@@ -11,7 +10,7 @@ const router = Router();
 router.get("/", async (req: Request, res: Response) => {
 	const { guild_id } = req.params;
 	const guild = await Guild.findOneOrFail({ id: guild_id });
-	await isMember(req.user_id, guild_id);
+	await Member.IsInGuildOrFail(req.user_id, guild_id);
 
 	try {
 		instanceOf({ $limit: new Length(Number, 1, 1000), $after: String }, req.query, {
@@ -23,12 +22,16 @@ router.get("/", async (req: Request, res: Response) => {
 		return res.status(400).json({ code: 50035, message: "Invalid Query", success: false, errors: error });
 	}
 
-	// @ts-ignore
-	if (!req.query.limit) req.query.limit = 1;
-	const { limit, after } = (<unknown>req.query) as { limit: number; after: string };
-	const query = after ? { id: { $gt: after } } : {};
+	const { limit, after } = (<unknown>req.query) as { limit?: number; after?: string };
+	const query = after ? { id: MoreThan(after) } : {};
+
+	const members = await Member.find({
+		where: { guild_id, ...query },
+		select: PublicMemberProjection,
+		take: limit || 1,
+		order: { id: "ASC" }
+	});
 
-	var members = await Member.find({ guild_id, ...query }, PublicMemberProjection).limit(limit);
 	return res.json(members);
 });