summary refs log tree commit diff
path: root/src/api/routes/users/#id/profile.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/users/#id/profile.ts')
-rw-r--r--src/api/routes/users/#id/profile.ts214
1 files changed, 100 insertions, 114 deletions
diff --git a/src/api/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts
index eecec0f3..4a4965d8 100644
--- a/src/api/routes/users/#id/profile.ts
+++ b/src/api/routes/users/#id/profile.ts
@@ -30,129 +30,115 @@ import { Request, Response, Router } from "express";
 
 const router: Router = Router();
 
-router.get(
-	"/",
-	route({ responses: { 200: { body: "UserProfileResponse" } } }),
-	async (req: Request, res: Response) => {
-		if (req.params.id === "@me") req.params.id = req.user_id;
+router.get("/", route({ responses: { 200: { body: "UserProfileResponse" } } }), async (req: Request, res: Response) => {
+	if (req.params.id === "@me") req.params.id = req.user_id;
 
-		const { guild_id, with_mutual_guilds } = req.query;
+	const { guild_id, with_mutual_guilds } = req.query;
 
-		const user = await User.getPublicUser(req.params.id, {
-			relations: ["connected_accounts"],
+	const user = await User.getPublicUser(req.params.id, {
+		relations: ["connected_accounts"],
+	});
+
+	const mutual_guilds: object[] = [];
+	let premium_guild_since;
+
+	if (with_mutual_guilds == "true") {
+		const requested_member = await Member.find({
+			where: { id: req.params.id },
+		});
+		const self_member = await Member.find({
+			where: { id: req.user_id },
 		});
 
-		const mutual_guilds: object[] = [];
-		let premium_guild_since;
-
-		if (with_mutual_guilds == "true") {
-			const requested_member = await Member.find({
-				where: { id: req.params.id },
-			});
-			const self_member = await Member.find({
-				where: { id: req.user_id },
-			});
-
-			for (const rmem of requested_member) {
-				if (rmem.premium_since) {
-					if (premium_guild_since) {
-						if (premium_guild_since > rmem.premium_since) {
-							premium_guild_since = rmem.premium_since;
-						}
-					} else {
+		for (const rmem of requested_member) {
+			if (rmem.premium_since) {
+				if (premium_guild_since) {
+					if (premium_guild_since > rmem.premium_since) {
 						premium_guild_since = rmem.premium_since;
 					}
+				} else {
+					premium_guild_since = rmem.premium_since;
 				}
-				for (const smem of self_member) {
-					if (smem.guild_id === rmem.guild_id) {
-						mutual_guilds.push({
-							id: rmem.guild_id,
-							nick: rmem.nick,
-						});
-					}
+			}
+			for (const smem of self_member) {
+				if (smem.guild_id === rmem.guild_id) {
+					mutual_guilds.push({
+						id: rmem.guild_id,
+						nick: rmem.nick,
+					});
 				}
 			}
 		}
-
-		const guild_member =
-			guild_id && typeof guild_id == "string"
-				? await Member.findOneOrFail({
-						where: { id: req.params.id, guild_id: guild_id },
-						relations: ["roles"],
-				  })
-				: undefined;
-
-		// TODO: make proper DTO's in util?
-
-		const userProfile = {
-			bio: req.user_bot ? null : user.bio,
-			accent_color: user.accent_color,
-			banner: user.banner,
-			pronouns: user.pronouns,
-			theme_colors: user.theme_colors,
-		};
-
-		const guildMemberProfile = {
-			accent_color: null,
-			banner: guild_member?.banner || null,
-			bio: guild_member?.bio || "",
-			guild_id,
-		};
-		res.json({
-			connected_accounts: user.connected_accounts.filter(
-				(x) => x.visibility != 0,
-			),
-			premium_guild_since: premium_guild_since, // TODO
-			premium_since: user.premium_since, // TODO
-			mutual_guilds: mutual_guilds, // TODO {id: "", nick: null} when ?with_mutual_guilds=true
-			user: user.toPublicUser(),
-			premium_type: user.premium_type,
-			profile_themes_experiment_bucket: 4, // TODO: This doesn't make it available, for some reason?
-			user_profile: userProfile,
-			guild_member: guild_member?.toPublicMember(),
-			guild_member_profile: guild_id && guildMemberProfile,
-		});
-	},
-);
-
-router.patch(
-	"/",
-	route({ requestBody: "UserProfileModifySchema" }),
-	async (req: Request, res: Response) => {
-		const body = req.body as UserProfileModifySchema;
-
-		if (body.banner)
-			body.banner = await handleFile(
-				`/banners/${req.user_id}`,
-				body.banner as string,
-			);
-		const user = await User.findOneOrFail({
-			where: { id: req.user_id },
-			select: [...PrivateUserProjection, "data"],
-		});
-
-		user.assign(body);
-		await user.save();
-
-		// eslint-disable-next-line @typescript-eslint/ban-ts-comment
-		// @ts-ignore
-		delete user.data;
-
-		// TODO: send update member list event in gateway
-		await emitEvent({
-			event: "USER_UPDATE",
-			user_id: req.user_id,
-			data: user,
-		} as UserUpdateEvent);
-
-		res.json({
-			accent_color: user.accent_color,
-			bio: user.bio,
-			banner: user.banner,
-			theme_colors: user.theme_colors,
-			pronouns: user.pronouns,
-		});
-	},
-);
+	}
+
+	const guild_member =
+		guild_id && typeof guild_id == "string"
+			? await Member.findOneOrFail({
+					where: { id: req.params.id, guild_id: guild_id },
+					relations: ["roles"],
+			  })
+			: undefined;
+
+	// TODO: make proper DTO's in util?
+
+	const userProfile = {
+		bio: req.user_bot ? null : user.bio,
+		accent_color: user.accent_color,
+		banner: user.banner,
+		pronouns: user.pronouns,
+		theme_colors: user.theme_colors,
+	};
+
+	const guildMemberProfile = {
+		accent_color: null,
+		banner: guild_member?.banner || null,
+		bio: guild_member?.bio || "",
+		guild_id,
+	};
+	res.json({
+		connected_accounts: user.connected_accounts.filter((x) => x.visibility != 0),
+		premium_guild_since: premium_guild_since, // TODO
+		premium_since: user.premium_since, // TODO
+		mutual_guilds: mutual_guilds, // TODO {id: "", nick: null} when ?with_mutual_guilds=true
+		user: user.toPublicUser(),
+		premium_type: user.premium_type,
+		profile_themes_experiment_bucket: 4, // TODO: This doesn't make it available, for some reason?
+		user_profile: userProfile,
+		guild_member: guild_member?.toPublicMember(),
+		guild_member_profile: guild_id && guildMemberProfile,
+	});
+});
+
+router.patch("/", route({ requestBody: "UserProfileModifySchema" }), async (req: Request, res: Response) => {
+	const body = req.body as UserProfileModifySchema;
+
+	if (body.banner) body.banner = await handleFile(`/banners/${req.user_id}`, body.banner as string);
+	const user = await User.findOneOrFail({
+		where: { id: req.user_id },
+		select: [...PrivateUserProjection, "data"],
+	});
+
+	user.assign(body);
+	await user.save();
+
+	// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+	// @ts-ignore
+	delete user.data;
+
+	// TODO: send update member list event in gateway
+	await emitEvent({
+		event: "USER_UPDATE",
+		user_id: req.user_id,
+		data: user,
+	} as UserUpdateEvent);
+
+	res.json({
+		accent_color: user.accent_color,
+		bio: user.bio,
+		banner: user.banner,
+		theme_colors: user.theme_colors,
+		pronouns: user.pronouns,
+	});
+});
 
 export default router;