summary refs log tree commit diff
path: root/api/src/routes/users
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-08-24 16:35:04 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-08-24 16:35:04 +0200
commita567551c8a6b03a956d21354a5504b9f9e1f40b1 (patch)
tree4f8242ecfa92c8a58e040a8dc705daafb2e68d6c /api/src/routes/users
parent:sparkles: typeorm entities (diff)
downloadserver-a567551c8a6b03a956d21354a5504b9f9e1f40b1.tar.xz
:construction: api
Diffstat (limited to 'api/src/routes/users')
-rw-r--r--api/src/routes/users/#id/profile.ts34
-rw-r--r--api/src/routes/users/@me/channels.ts16
-rw-r--r--api/src/routes/users/@me/delete.ts10
-rw-r--r--api/src/routes/users/@me/disable.ts8
-rw-r--r--api/src/routes/users/@me/guilds.ts17
-rw-r--r--api/src/routes/users/@me/index.ts6
-rw-r--r--api/src/routes/users/@me/profile.ts34
-rw-r--r--api/src/routes/users/@me/relationships.ts40
-rw-r--r--api/src/routes/users/@me/settings.ts4
9 files changed, 83 insertions, 86 deletions
diff --git a/api/src/routes/users/#id/profile.ts b/api/src/routes/users/#id/profile.ts
index 4b4b9439..46c96698 100644
--- a/api/src/routes/users/#id/profile.ts
+++ b/api/src/routes/users/#id/profile.ts
@@ -4,24 +4,24 @@ import { getPublicUser } from "../../../util/User";
 const router: Router = Router();
 
 router.get("/", async (req: Request, res: Response) => {
-	const user = await getPublicUser(req.params.id, { user_data: true })
+	const user = await getPublicUser(req.params.id, { data: true });
 
-    res.json({
-        connected_accounts: user.user_data.connected_accounts,
-        premium_guild_since: null, // TODO
-        premium_since: null, // TODO
-        user: {
-            username: user.username,
-            discriminator: user.discriminator,
-            id: user.id,
-            public_flags: user.public_flags,
-            avatar: user.avatar,
-            accent_color: user.accent_color,
-            banner: user.banner,
-            bio: req.user_bot ? null : user.bio,
-            bot: user.bot,
-        }
-    });
+	res.json({
+		connected_accounts: user.data.connected_accounts,
+		premium_guild_since: null, // TODO
+		premium_since: null, // TODO
+		user: {
+			username: user.username,
+			discriminator: user.discriminator,
+			id: user.id,
+			public_flags: user.public_flags,
+			avatar: user.avatar,
+			accent_color: user.accent_color,
+			banner: user.banner,
+			bio: req.user_bot ? null : user.bio,
+			bot: user.bot
+		}
+	});
 });
 
 export default router;
diff --git a/api/src/routes/users/@me/channels.ts b/api/src/routes/users/@me/channels.ts
index db9f8832..28e77dd9 100644
--- a/api/src/routes/users/@me/channels.ts
+++ b/api/src/routes/users/@me/channels.ts
@@ -1,6 +1,6 @@
 import { Router, Request, Response } from "express";
 import {
-	ChannelModel,
+	Channel,
 	ChannelCreateEvent,
 	toObject,
 	ChannelType,
@@ -8,7 +8,7 @@ import {
 	trimSpecial,
 	Channel,
 	DMChannel,
-	UserModel,
+	User,
 	emitEvent
 } from "@fosscord/util";
 import { HTTPError } from "lambert-server";
@@ -19,9 +19,9 @@ import { check } from "../../../util/instanceOf";
 const router: Router = Router();
 
 router.get("/", async (req: Request, res: Response) => {
-	var channels = await ChannelModel.find({ recipient_ids: req.user_id }).exec();
+	var channels = await Channel.find({ recipient_ids: req.user_id });
 
-	res.json(toObject(channels));
+	res.json(channels);
 });
 
 router.post("/", check(DmChannelCreateSchema), async (req: Request, res: Response) => {
@@ -29,14 +29,14 @@ router.post("/", check(DmChannelCreateSchema), async (req: Request, res: Respons
 
 	body.recipients = body.recipients.filter((x) => x !== req.user_id).unique();
 
-	if (!(await Promise.all(body.recipients.map((x) => UserModel.exists({ id: x })))).every((x) => x)) {
+	if (!(await Promise.all(body.recipients.map((x) => User.exists({ id: x })))).every((x) => x)) {
 		throw new HTTPError("Recipient not found");
 	}
 
 	const type = body.recipients.length === 1 ? ChannelType.DM : ChannelType.GROUP_DM;
 	const name = trimSpecial(body.name);
 
-	const channel = await new ChannelModel({
+	const channel = await new Channel({
 		name,
 		type,
 		owner_id: req.user_id,
@@ -46,9 +46,9 @@ router.post("/", check(DmChannelCreateSchema), async (req: Request, res: Respons
 		recipient_ids: [...body.recipients, req.user_id]
 	}).save();
 
-	await emitEvent({ event: "CHANNEL_CREATE", data: toObject(channel), user_id: req.user_id } as ChannelCreateEvent);
+	await emitEvent({ event: "CHANNEL_CREATE", data: channel), user_id: req.user_id } as ChannelCreateEvent;
 
-	res.json(toObject(channel));
+	res.json(channel);
 });
 
 export default router;
diff --git a/api/src/routes/users/@me/delete.ts b/api/src/routes/users/@me/delete.ts
index f863237d..fa8134cc 100644
--- a/api/src/routes/users/@me/delete.ts
+++ b/api/src/routes/users/@me/delete.ts
@@ -1,16 +1,16 @@
 import { Router, Request, Response } from "express";
-import { GuildModel, MemberModel, UserModel } from "@fosscord/util";
+import { Guild, Member, User } from "@fosscord/util";
 import bcrypt from "bcrypt";
 const router = Router();
 
 router.post("/", async (req: Request, res: Response) => {
-	const user = await UserModel.findOne({ id: req.user_id }).exec(); //User object
+	const user = await User.findOneOrFail({ id: req.user_id }); //User object
 
-	let correctpass = await bcrypt.compare(req.body.password, user!.user_data.hash); //Not sure if user typed right password :/
+	let correctpass = await bcrypt.compare(req.body.password, user!.data.hash); //Not sure if user typed right password :/
 	if (correctpass) {
 		await Promise.all([
-			UserModel.deleteOne({ id: req.user_id }).exec(), //Yeetus user deletus
-			MemberModel.deleteMany({ id: req.user_id }).exec()
+			User.deleteOne({ id: req.user_id }), //Yeetus user deletus
+			Member.deleteMany({ id: req.user_id })
 		]);
 
 		res.sendStatus(204);
diff --git a/api/src/routes/users/@me/disable.ts b/api/src/routes/users/@me/disable.ts
index 2d3a9850..a40c9e59 100644
--- a/api/src/routes/users/@me/disable.ts
+++ b/api/src/routes/users/@me/disable.ts
@@ -1,15 +1,15 @@
-import { UserModel } from "@fosscord/util";
+import { User } from "@fosscord/util";
 import { Router, Response, Request } from "express";
 import bcrypt from "bcrypt";
 
 const router = Router();
 
 router.post("/", async (req: Request, res: Response) => {
-	const user = await UserModel.findOne({ id: req.user_id }).exec(); //User object
+	const user = await User.findOneOrFail({ id: req.user_id }); //User object
 
-	let correctpass = await bcrypt.compare(req.body.password, user!.user_data.hash); //Not sure if user typed right password :/
+	let correctpass = await bcrypt.compare(req.body.password, user!.data.hash); //Not sure if user typed right password :/
 	if (correctpass) {
-		await UserModel.updateOne({ id: req.user_id }, { disabled: true }).exec();
+		await User.update({ id: req.user_id }, { disabled: true });
 
 		res.sendStatus(204);
 	} else {
diff --git a/api/src/routes/users/@me/guilds.ts b/api/src/routes/users/@me/guilds.ts
index a9b53b75..e40bfec9 100644
--- a/api/src/routes/users/@me/guilds.ts
+++ b/api/src/routes/users/@me/guilds.ts
@@ -1,5 +1,5 @@
 import { Router, Request, Response } from "express";
-import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject, emitEvent } from "@fosscord/util";
+import { Guild, Member, User, GuildDeleteEvent, GuildMemberRemoveEvent, toObject, emitEvent } from "@fosscord/util";
 import { HTTPError } from "lambert-server";
 
 import { getPublicUser } from "../../../util/User";
@@ -7,28 +7,25 @@ import { getPublicUser } from "../../../util/User";
 const router: Router = Router();
 
 router.get("/", async (req: Request, res: Response) => {
-	const user = await UserModel.findOne({ id: req.user_id }, { guilds: true }).exec();
+	const user = await User.findOneOrFail({ id: req.user_id }, { guilds: true });
 	if (!user) throw new HTTPError("User not found", 404);
 
 	var guildIDs = user.guilds || [];
-	var guild = await GuildModel.find({ id: { $in: guildIDs } })
-		.populate({ path: "joined_at", match: { id: req.user_id } })
-		.exec();
-
-	res.json(toObject(guild));
+	var guild = await Guild.find({ id: { $in: guildIDs } }).populate({ path: "joined_at", match: { id: req.user_id } });
+	res.json(guild);
 });
 
 // user send to leave a certain guild
 router.delete("/:id", async (req: Request, res: Response) => {
 	const guild_id = req.params.id;
-	const guild = await GuildModel.findOne({ id: guild_id }, { guild_id: true }).exec();
+	const guild = await Guild.findOneOrFail({ id: guild_id }, { guild_id: true });
 
 	if (!guild) throw new HTTPError("Guild doesn't exist", 404);
 	if (guild.owner_id === req.user_id) throw new HTTPError("You can't leave your own guild", 400);
 
 	await Promise.all([
-		MemberModel.deleteOne({ id: req.user_id, guild_id: guild_id }).exec(),
-		UserModel.updateOne({ id: req.user_id }, { $pull: { guilds: guild_id } }).exec(),
+		Member.deleteOne({ id: req.user_id, guild_id: guild_id }),
+		User.update({ id: req.user_id }, { $pull: { guilds: guild_id } }),
 		emitEvent({
 			event: "GUILD_DELETE",
 			data: {
diff --git a/api/src/routes/users/@me/index.ts b/api/src/routes/users/@me/index.ts
index 6ebc6634..903b24aa 100644
--- a/api/src/routes/users/@me/index.ts
+++ b/api/src/routes/users/@me/index.ts
@@ -1,5 +1,5 @@
 import { Router, Request, Response } from "express";
-import { UserModel, toObject, PublicUserProjection } from "@fosscord/util";
+import { User, toObject, PublicUserProjection } from "@fosscord/util";
 import { getPublicUser } from "../../../util/User";
 import { UserModifySchema } from "../../../schema/User";
 import { check } from "../../../util/instanceOf";
@@ -38,10 +38,10 @@ router.patch("/", check(UserModifySchema), async (req: Request, res: Response) =
 	if (body.avatar) body.avatar = await handleFile(`/avatars/${req.user_id}`, body.avatar as string);
 	if (body.banner) body.banner = await handleFile(`/banners/${req.user_id}`, body.banner as string);
 
-	const user = await UserModel.findOneAndUpdate({ id: req.user_id }, body, { projection: UserUpdateProjection, new: true }).exec();
+	const user = await User.findOneOrFailAndUpdate({ id: req.user_id }, body, { projection: UserUpdateProjection, new: true });
 	// TODO: dispatch user update event
 
-	res.json(toObject(user));
+	res.json(user);
 });
 
 export default router;
diff --git a/api/src/routes/users/@me/profile.ts b/api/src/routes/users/@me/profile.ts
index b67d1964..fdb969dc 100644
--- a/api/src/routes/users/@me/profile.ts
+++ b/api/src/routes/users/@me/profile.ts
@@ -4,24 +4,24 @@ import { getPublicUser } from "../../../util/User";
 const router: Router = Router();
 
 router.get("/", async (req: Request, res: Response) => {
-    const user = await getPublicUser(req.user_id, { user_data: true })
+	const user = await getPublicUser(req.user_id, { data: true });
 
-    res.json({
-        connected_accounts: user.user_data.connected_accounts,
-        premium_guild_since: null, // TODO
-        premium_since: null, // TODO
-        user: {
-            username: user.username,
-            discriminator: user.discriminator,
-            id: user.id,
-            public_flags: user.public_flags,
-            avatar: user.avatar,
-            accent_color: user.accent_color,
-            banner: user.banner,
-            bio: user.bio,
-            bot: user.bot,
-        }
-    });
+	res.json({
+		connected_accounts: user.data.connected_accounts,
+		premium_guild_since: null, // TODO
+		premium_since: null, // TODO
+		user: {
+			username: user.username,
+			discriminator: user.discriminator,
+			id: user.id,
+			public_flags: user.public_flags,
+			avatar: user.avatar,
+			accent_color: user.accent_color,
+			banner: user.banner,
+			bio: user.bio,
+			bot: user.bot
+		}
+	});
 });
 
 export default router;
diff --git a/api/src/routes/users/@me/relationships.ts b/api/src/routes/users/@me/relationships.ts
index 642ee5f9..9b8d6199 100644
--- a/api/src/routes/users/@me/relationships.ts
+++ b/api/src/routes/users/@me/relationships.ts
@@ -1,6 +1,6 @@
 import {
 	RelationshipAddEvent,
-	UserModel,
+	User,
 	PublicUserProjection,
 	toObject,
 	RelationshipType,
@@ -18,18 +18,18 @@ const router = Router();
 const userProjection = { "user_data.relationships": true, ...PublicUserProjection };
 
 router.get("/", async (req: Request, res: Response) => {
-	const user = await UserModel.findOne({ id: req.user_id }, { user_data: { relationships: true } })
-		.populate({ path: "user_data.relationships.id", model: UserModel })
-		.exec();
-
-	return res.json(toObject(user.user_data.relationships));
+	const user = await User.findOneOrFail({ id: req.user_id }, { user_data: { relationships: true } }).populate({
+		path: "user_data.relationships.id",
+		model: User
+	});
+	return res.json(user.user_data.relationships);
 });
 
 async function addRelationship(req: Request, res: Response, friend: UserDocument, type: RelationshipType) {
 	const id = friend.id;
 	if (id === req.user_id) throw new HTTPError("You can't add yourself as a friend");
 
-	const user = await UserModel.findOne({ id: req.user_id }, userProjection).exec();
+	const user = await User.findOneOrFail({ id: req.user_id }, userProjection);
 	const newUserRelationships = [...user.user_data.relationships];
 	const newFriendRelationships = [...friend.user_data.relationships];
 
@@ -48,7 +48,7 @@ async function addRelationship(req: Request, res: Response, friend: UserDocument
 		if (friendRequest && friendRequest.type !== RelationshipType.blocked) {
 			newFriendRelationships.remove(friendRequest);
 			await Promise.all([
-				UserModel.updateOne({ id: friend.id }, { "user_data.relationships": newFriendRelationships }).exec(),
+				User.update({ id: friend.id }, { "user_data.relationships": newFriendRelationships }),
 				emitEvent({
 					event: "RELATIONSHIP_REMOVE",
 					data: friendRequest,
@@ -58,12 +58,12 @@ async function addRelationship(req: Request, res: Response, friend: UserDocument
 		}
 
 		await Promise.all([
-			UserModel.updateOne({ id: req.user_id }, { "user_data.relationships": newUserRelationships }).exec(),
+			User.update({ id: req.user_id }, { "user_data.relationships": newUserRelationships }),
 			emitEvent({
 				event: "RELATIONSHIP_ADD",
 				data: {
-					...toObject(relationship),
-					user: { ...toObject(friend), user_data: undefined }
+					...relationship,
+					user: { ...friend, user_data: undefined }
 				},
 				user_id: req.user_id
 			} as RelationshipAddEvent)
@@ -91,22 +91,22 @@ async function addRelationship(req: Request, res: Response, friend: UserDocument
 	} else newUserRelationships.push(outgoing_relationship);
 
 	await Promise.all([
-		UserModel.updateOne({ id: req.user_id }, { "user_data.relationships": newUserRelationships }).exec(),
-		UserModel.updateOne({ id: friend.id }, { "user_data.relationships": newFriendRelationships }).exec(),
+		User.update({ id: req.user_id }, { "user_data.relationships": newUserRelationships }),
+		User.update({ id: friend.id }, { "user_data.relationships": newFriendRelationships }),
 		emitEvent({
 			event: "RELATIONSHIP_ADD",
 			data: {
 				...outgoing_relationship,
-				user: { ...toObject(friend), user_data: undefined }
+				user: { ...friend, user_data: undefined }
 			},
 			user_id: req.user_id
 		} as RelationshipAddEvent),
 		emitEvent({
 			event: "RELATIONSHIP_ADD",
 			data: {
-				...toObject(incoming_relationship),
+				...incoming_relationship,
 				should_notify: true,
-				user: { ...toObject(user), user_data: undefined }
+				user: { ...user, user_data: undefined }
 			},
 			user_id: id
 		} as RelationshipAddEvent)
@@ -116,14 +116,14 @@ async function addRelationship(req: Request, res: Response, friend: UserDocument
 }
 
 router.put("/:id", check({ $type: new Length(Number, 1, 4) }), async (req: Request, res: Response) => {
-	return await addRelationship(req, res, await UserModel.findOne({ id: req.params.id }), req.body.type);
+	return await addRelationship(req, res, await User.findOneOrFail({ id: req.params.id }), req.body.type);
 });
 
 router.post("/", check({ discriminator: String, username: String }), async (req: Request, res: Response) => {
 	return await addRelationship(
 		req,
 		res,
-		await UserModel.findOne(req.body as { discriminator: string; username: string }).exec(),
+		await User.findOneOrFail(req.body as { discriminator: string; username: string }),
 		req.body.type
 	);
 });
@@ -132,10 +132,10 @@ router.delete("/:id", async (req: Request, res: Response) => {
 	const { id } = req.params;
 	if (id === req.user_id) throw new HTTPError("You can't remove yourself as a friend");
 
-	const user = await UserModel.findOne({ id: req.user_id }).exec();
+	const user = await User.findOneOrFail({ id: req.user_id });
 	if (!user) throw new HTTPError("Invalid token", 400);
 
-	const friend = await UserModel.findOne({ id }, userProjection).exec();
+	const friend = await User.findOneOrFail({ id }, userProjection);
 	if (!friend) throw new HTTPError("User not found", 404);
 
 	const relationship = user.user_data.relationships.find((x) => x.id === id);
diff --git a/api/src/routes/users/@me/settings.ts b/api/src/routes/users/@me/settings.ts
index f045a010..90ee6372 100644
--- a/api/src/routes/users/@me/settings.ts
+++ b/api/src/routes/users/@me/settings.ts
@@ -1,5 +1,5 @@
 import { Router, Response, Request } from "express";
-import { UserModel, UserSettings } from "@fosscord/util";
+import { User, UserSettings } from "@fosscord/util";
 import { check } from "../../../util/instanceOf";
 import { UserSettingsSchema } from "../../../schema/User";
 
@@ -9,7 +9,7 @@ router.patch("/", check(UserSettingsSchema), async (req: Request, res: Response)
 	const body = req.body as UserSettings;
 
 	// only users can update user settings
-	await UserModel.updateOne({ id: req.user_id, bot: false }, body).exec();
+	await User.update({ id: req.user_id, bot: false }, { settings: body });
 
 	res.sendStatus(204);
 });