From 042aae66f2730991d0f4719bcb877e50847ed814 Mon Sep 17 00:00:00 2001 From: Radical Date: Sat, 31 May 2025 17:52:40 +0200 Subject: [PATCH] fix: make /me/guilds return guilds instead of member objects --- src/api/v1/me/guilds.rs | 41 ++++++++++++++++++++++++++++++++--------- src/structs.rs | 34 +++++++++++++++++----------------- 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/src/api/v1/me/guilds.rs b/src/api/v1/me/guilds.rs index 06c3328..7fe02bd 100644 --- a/src/api/v1/me/guilds.rs +++ b/src/api/v1/me/guilds.rs @@ -18,16 +18,39 @@ use crate::{ /// ``` /// json!([ /// { -/// "uuid": "22006503-fb01-46e6-8e0e-70336dac6c63", -/// "nickname": "This field is nullable", -/// "user_uuid": "522bca17-de63-4706-9d18-0971867ad1e0", -/// "guild_uuid": "0911e468-3e9e-47bf-8381-59b30e8b68a8" +/// "uuid": "383d2afa-082f-4dd3-9050-ca6ed91487b6", +/// "name": "My new server!", +/// "description": null, +/// "icon": null, +/// "owner_uuid": "155d2291-fb23-46bd-a656-ae7c5d8218e6", +/// "roles": [], +/// "member_count": 1 /// }, /// { -/// "uuid": "bf95361e-3b64-4704-969c-3c5a80d10514", -/// "nickname": null, -/// "user_uuid": "522bca17-de63-4706-9d18-0971867ad1e0", -/// "guild_uuid": "69ec2ce5-3d8b-4451-b644-c2d969905458" +/// "uuid": "5ba61ec7-5f97-43e1-89a5-d4693c155612", +/// "name": "My first server!", +/// "description": "This is a cool and nullable description!", +/// "icon": "https://nullable-url/path/to/icon.png", +/// "owner_uuid": "155d2291-fb23-46bd-a656-ae7c5d8218e6", +/// "roles": [ +/// { +/// "uuid": "be0e4da4-cf73-4f45-98f8-bb1c73d1ab8b", +/// "guild_uuid": "5ba61ec7-5f97-43e1-89a5-d4693c155612", +/// "name": "Cool people", +/// "color": 15650773, +/// "is_above": c7432f1c-f4ad-4ad3-8216-51388b6abb5b, +/// "permissions": 0 +/// } +/// { +/// "uuid": "c7432f1c-f4ad-4ad3-8216-51388b6abb5b", +/// "guild_uuid": "5ba61ec7-5f97-43e1-89a5-d4693c155612", +/// "name": "Equally cool people", +/// "color": 16777215, +/// "is_above": null, +/// "permissions": 0 +/// } +/// ], +/// "member_count": 20 /// } /// ]); /// ``` @@ -46,7 +69,7 @@ pub async fn get(req: HttpRequest, data: web::Data) -> Result Result, Error> { - let mut conn = data.pool.get().await?; - + pub async fn fetch_memberships(&self, conn: &mut Conn) -> Result, Error> { use guild_members::dsl; - let member_builders: Vec = dsl::guild_members + let memberships: Vec = dsl::guild_members .filter(dsl::user_uuid.eq(self.uuid)) .select(MemberBuilder::as_select()) - .load(&mut conn) + .load(conn) .await?; - let user = User::fetch_one(data, self.uuid).await?; + let mut guilds: Vec = vec![]; - let memberships = member_builders - .iter() - .map(|m| Member { - uuid: m.uuid, - nickname: m.nickname.clone(), - user_uuid: m.user_uuid, - guild_uuid: m.guild_uuid, - user: user.clone(), - }) - .collect(); + for membership in memberships { + use guilds::dsl; + guilds.push( + dsl::guilds + .filter(dsl::uuid.eq(membership.guild_uuid)) + .select(GuildBuilder::as_select()) + .get_result(conn) + .await? + .build(conn) + .await?, + ) + } - Ok(memberships) + Ok(guilds) } pub async fn set_avatar(