From 6c603afc5428b1f9e855dc4b3947020a11a67a3e Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Sun, 11 Jun 2023 00:51:03 +1000 Subject: [PATCH] Fix docs for /users/:id/profile --- assets/openapi.json | Bin 566263 -> 571228 bytes assets/schemas.json | Bin 18087810 -> 18199664 bytes src/api/routes/users/#id/profile.ts | 38 +----------------- src/util/entities/Member.ts | 10 ++--- src/util/schemas/UserProfileResponse.ts | 26 ------------ .../schemas/responses/UserProfileResponse.ts | 31 +++++++++++++- 6 files changed, 37 insertions(+), 68 deletions(-) delete mode 100644 src/util/schemas/UserProfileResponse.ts diff --git a/assets/openapi.json b/assets/openapi.json index 8ff48eee12cc58dd252d553bdce6993fd75545df..9d4f0a1ecd58b826406fa36aa3ea4c3052f20449 100644 GIT binary patch delta 843 zcmaJ5K&UitwO6NNF@hpVr8SLS+m3hyr?-8 zdNj?$ol+EvTIq2KVh~a6N&Jb8M?tWjh16RQE!DR_X+XilgEuqZeDlrlZN2k;Yj}%u z=sETUA%Y19z1yS>LKW0Sms8`_Mh*2LdViY-LBahr$;Cl-5DzTJu^(POz!OxcjDxU* zIaI;&&Pf!XWCn;RX&>vfO%DGD*q)CxRzj9Etb3Gu(EFE;iA5`ApXK-PH z9Drn**y-DX(_og@(Y0PVmrbQJVj_QCl*C&J@wP1H(vo;HpO`6Jy#WiaxNeAi=Gtjw zb_}8`i0AbV2v(2)zebRUk7^9Cw#Wr&#AQJe#AM_&dWzu_5G@g1*fCH=G7NGS3k=sz z*PSi{R5~-+(yWhS88|O2YhaU{Pyayj1-?t`@#C~UIS8u{(P5Lz z(@Urrrvd&Cmw&BIdzeBPLkY3Y`vQh58WkYbUi!qBJAs z60O72=3)Q2BqZx>iM=Z_&j`)v9BkH*u?Vx6mDYcTp>xUNV#^F^B|AKM+EmO~+LV*c zNOK;X{$hsOObDm=E~@%CQ16jxWrysizdv?cq(Yv#5gsAr2Ij5~*tbd?J^wS9NQ1+N h==X}(wADg`*)+O|z4KGMgguTuo;^!-YPaq2${)-eEg}E_ delta 72 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 x.id) - .filter((id) => id != guild_id), - user: userDto, - } - : undefined; - const guildMemberProfile = { accent_color: null, banner: guild_member?.banner || null, @@ -139,11 +105,11 @@ router.get( 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, + 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_id && guildMemberDto, + guild_member: guild_member?.toPublicMember(), guild_member_profile: guild_id && guildMemberProfile, }); }, diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts index 8c208202..8be6eae1 100644 --- a/src/util/entities/Member.ts +++ b/src/util/entities/Member.ts @@ -344,11 +344,7 @@ export class Member extends BaseClassWithoutId { relations: ["user", "roles"], take: 10, }) - ).map((member) => ({ - ...member.toPublicMember(), - user: member.user.toPublicUser(), - roles: member.roles.map((x) => x.id), - })); + ).map((member) => member.toPublicMember()); if ( await Member.count({ @@ -455,6 +451,10 @@ export class Member extends BaseClassWithoutId { PublicMemberProjection.forEach((x) => { member[x] = this[x]; }); + + if (member.roles) member.roles = member.roles.map((x: Role) => x.id); + if (member.user) member.user = member.user.toPublicUser(); + return member as PublicMember; } } diff --git a/src/util/schemas/UserProfileResponse.ts b/src/util/schemas/UserProfileResponse.ts deleted file mode 100644 index 10bbcdbf..00000000 --- a/src/util/schemas/UserProfileResponse.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - Spacebar: A FOSS re-implementation and extension of the Discord.com backend. - Copyright (C) 2023 Spacebar and Spacebar Contributors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -import { PublicConnectedAccount, PublicUser } from ".."; - -export interface UserProfileResponse { - user: PublicUser; - connected_accounts: PublicConnectedAccount; - premium_guild_since?: Date; - premium_since?: Date; -} diff --git a/src/util/schemas/responses/UserProfileResponse.ts b/src/util/schemas/responses/UserProfileResponse.ts index bd1f46dd..eba7cbcc 100644 --- a/src/util/schemas/responses/UserProfileResponse.ts +++ b/src/util/schemas/responses/UserProfileResponse.ts @@ -1,8 +1,37 @@ -import { PublicConnectedAccount, PublicUser } from "../../entities"; +import { + Member, + PublicConnectedAccount, + PublicMember, + PublicUser, + User, +} from "@spacebar/util"; + +export type MutualGuild = { + id: string; + nick?: string; +}; + +export type PublicMemberProfile = Pick< + Member, + "banner" | "bio" | "guild_id" +> & { + accent_color: null; // TODO +}; + +export type UserProfile = Pick< + User, + "bio" | "accent_color" | "banner" | "pronouns" | "theme_colors" +>; export interface UserProfileResponse { user: PublicUser; connected_accounts: PublicConnectedAccount; premium_guild_since?: Date; premium_since?: Date; + mutual_guilds: MutualGuild[]; + premium_type: number; + profile_themes_experiment_bucket: number; + user_profile: UserProfile; + guild_member?: PublicMember; + guild_member_profile?: PublicMemberProfile; }