diff options
author | Puyodead1 <puyodead@protonmail.com> | 2022-08-29 11:11:40 -0400 |
---|---|---|
committer | Puyodead1 <puyodead@protonmail.com> | 2022-08-29 11:11:40 -0400 |
commit | c2aba2910cb50211a91a057863ef0bd0497ceead (patch) | |
tree | 8fa7c143dd0f397ede278f688dc3d86c5195815e /src/api/routes/users | |
parent | Oop, deprecated typeorm call (diff) | |
download | server-c2aba2910cb50211a91a057863ef0bd0497ceead.tar.xz |
implement guild profiles and fix user profiles
Diffstat (limited to 'src/api/routes/users')
-rw-r--r-- | src/api/routes/users/#id/profile.ts | 56 | ||||
-rw-r--r-- | src/api/routes/users/@me/profile.ts | 34 |
2 files changed, 84 insertions, 6 deletions
diff --git a/src/api/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts index 766c9880..0b9107e2 100644 --- a/src/api/routes/users/#id/profile.ts +++ b/src/api/routes/users/#id/profile.ts @@ -1,5 +1,16 @@ import { route } from "@fosscord/api"; -import { Member, PublicConnectedAccount, User, UserPublic } from "@fosscord/util"; +import { + emitEvent, + handleFile, + Member, + OrmUtils, + PrivateUserProjection, + PublicConnectedAccount, + User, + UserProfileModifySchema, + UserPublic, + UserUpdateEvent +} from "@fosscord/util"; import { Request, Response, Router } from "express"; const router: Router = Router(); @@ -64,10 +75,10 @@ router.get("/", route({ test: { response: { body: "UserProfileResponse" } } }), const guildMemberDto = guild_member ? { - avatar: user.avatar, // TODO - banner: user.banner, // TODO - bio: req.user_bot ? null : user.bio, // TODO - communication_disabled_until: null, // TODO + avatar: guild_member.avatar, + banner: guild_member.banner, + bio: req.user_bot ? null : guild_member.bio, + communication_disabled_until: guild_member.communication_disabled_until, deaf: guild_member.deaf, flags: user.flags, is_pending: guild_member.pending, @@ -81,13 +92,46 @@ router.get("/", route({ test: { response: { body: "UserProfileResponse" } } }), } : undefined; + const guildMemberProfile = { + accent_color: null, + banner: guild_member?.banner || null, + bio: guild_member?.bio || "", + guild_id + }; res.json({ connected_accounts: user.connected_accounts, 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: userDto, - guild_member: guildMemberDto + guild_member: guildMemberDto, + guild_member_profile: guildMemberProfile + }); +}); + +router.patch("/", route({ body: "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); + let user = await User.findOneOrFail({ where: { id: req.user_id }, select: [...PrivateUserProjection, "data"] }); + + user = OrmUtils.mergeDeep(user, body); + await user.save(); + + // @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 }); }); diff --git a/src/api/routes/users/@me/profile.ts b/src/api/routes/users/@me/profile.ts new file mode 100644 index 00000000..95aa8e6b --- /dev/null +++ b/src/api/routes/users/@me/profile.ts @@ -0,0 +1,34 @@ +// import { route } from "@fosscord/api"; +// import { emitEvent, handleFile, OrmUtils, PrivateUserProjection, User, UserUpdateEvent } from "@fosscord/util"; +// import { Request, Response, Router } from "express"; +// import { UserProfileModifySchema } from "../../../../util/schemas/UserProfileModifySchema"; + +// const router: Router = Router(); + +// router.patch("/", route({ body: "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); +// let user = await User.findOneOrFail({ where: { id: req.user_id }, select: [...PrivateUserProjection, "data"] }); + +// user = OrmUtils.mergeDeep(user, body); +// await user.save(); + +// // @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 +// }); +// }); + +// export default router; |