diff --git a/assets/openapi.json b/assets/openapi.json index 4d285cb1..8ff48eee 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index 919d4981..95bc39fa 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/scripts/schema.js b/scripts/schema.js index b4393558..ff3280ac 100644 --- a/scripts/schema.js +++ b/scripts/schema.js @@ -34,9 +34,7 @@ const settings = { noExtraProps: true, defaultProps: false, }; -const compilerOptions = { - strictNullChecks: true, -}; + const Excluded = [ "DefaultSchema", "Schema", @@ -61,14 +59,6 @@ const Excluded = [ "TransportMakeRequestResponse", ]; -function modify(obj) { - for (var k in obj) { - if (typeof obj[k] === "object" && obj[k] !== null) { - modify(obj[k]); - } - } -} - function main() { const program = TJS.programFromConfig( path.join(__dirname, "..", "tsconfig.json"), @@ -111,32 +101,12 @@ function main() { delete part.properties[key]; continue; } - - // if (part.properties[key].anyOf) { - // const nullIndex = part.properties[key].anyOf.findIndex( - // (x) => x.type == "null", - // ); - // if (nullIndex != -1) { - // part.properties[key].nullable = true; - // part.properties[key].anyOf.splice(nullIndex, 1); - - // if (part.properties[key].anyOf.length == 1) { - // Object.assign( - // part.properties[key], - // part.properties[key].anyOf[0], - // ); - // delete part.properties[key].anyOf; - // } - // } - // } } } definitions = { ...definitions, [name]: { ...part } }; } - //modify(definitions); - fs.writeFileSync(schemaPath, JSON.stringify(definitions, null, 4)); } diff --git a/src/api/routes/guilds/#guild_id/members/#member_id/index.ts b/src/api/routes/guilds/#guild_id/members/#member_id/index.ts index 5f1f6fa7..cafb922e 100644 --- a/src/api/routes/guilds/#guild_id/members/#member_id/index.ts +++ b/src/api/routes/guilds/#guild_id/members/#member_id/index.ts @@ -27,6 +27,8 @@ import { handleFile, Member, MemberChangeSchema, + PublicMemberProjection, + PublicUserProjection, Role, Sticker, } from "@spacebar/util"; @@ -39,7 +41,7 @@ router.get( route({ responses: { 200: { - body: "Member", + body: "APIPublicMember", }, 403: { body: "APIErrorResponse", @@ -55,9 +57,28 @@ router.get( const member = await Member.findOneOrFail({ where: { id: member_id, guild_id }, + relations: ["roles", "user"], + select: { + index: true, + // only grab public member props + ...Object.fromEntries( + PublicMemberProjection.map((x) => [x, true]), + ), + // and public user props + user: Object.fromEntries( + PublicUserProjection.map((x) => [x, true]), + ), + roles: { + id: true, + }, + }, }); - return res.json(member); + return res.json({ + ...member.toPublicMember(), + user: member.user.toPublicUser(), + roles: member.roles.map((x) => x.id), + }); }, ); diff --git a/src/util/schemas/responses/TypedResponses.ts b/src/util/schemas/responses/TypedResponses.ts index 099efba3..4349b93c 100644 --- a/src/util/schemas/responses/TypedResponses.ts +++ b/src/util/schemas/responses/TypedResponses.ts @@ -11,6 +11,7 @@ import { Member, Message, PrivateUser, + PublicMember, PublicUser, Role, Sticker, @@ -68,6 +69,7 @@ export type APIChannelArray = Channel[]; export type APIEmojiArray = Emoji[]; export type APIMemberArray = Member[]; +export type APIPublicMember = PublicMember; export interface APIGuildWithJoinedAt extends Guild { joined_at: string;