feat: Make me optional in Member::fetch_one()

This commit is contained in:
Radical 2025-08-05 03:28:02 +02:00
parent 4cb89645fe
commit 8a7711cabc

View file

@ -107,7 +107,7 @@ impl MemberBuilder {
} }
} }
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize, Clone)]
pub struct Member { pub struct Member {
pub uuid: Uuid, pub uuid: Uuid,
pub nickname: Option<String>, pub nickname: Option<String>,
@ -150,14 +150,17 @@ impl Member {
pub async fn fetch_one( pub async fn fetch_one(
conn: &mut Conn, conn: &mut Conn,
cache_pool: &redis::Client, cache_pool: &redis::Client,
me: &Me, me: Option<&Me>,
user_uuid: Uuid, user_uuid: Uuid,
guild_uuid: Uuid, guild_uuid: Uuid,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
let member: MemberBuilder;
let user: UserBuilder;
let friend: Option<Friend>;
use friends::dsl as fdsl; use friends::dsl as fdsl;
use guild_members::dsl; use guild_members::dsl;
let (member, user, friend): (MemberBuilder, UserBuilder, Option<Friend>) = if let Some(me) = me {
dsl::guild_members (member, user, friend) = dsl::guild_members
.filter(dsl::guild_uuid.eq(guild_uuid)) .filter(dsl::guild_uuid.eq(guild_uuid))
.filter(dsl::user_uuid.eq(user_uuid)) .filter(dsl::user_uuid.eq(user_uuid))
.inner_join(users::table) .inner_join(users::table)
@ -174,6 +177,17 @@ impl Member {
)) ))
.get_result(conn) .get_result(conn)
.await?; .await?;
} else {
(member, user) = dsl::guild_members
.filter(dsl::guild_uuid.eq(guild_uuid))
.filter(dsl::user_uuid.eq(user_uuid))
.inner_join(users::table)
.select((MemberBuilder::as_select(), UserBuilder::as_select()))
.get_result(conn)
.await?;
friend = None;
}
member member
.build_with_parts(conn, cache_pool, user, friend) .build_with_parts(conn, cache_pool, user, friend)