From 27b469929915b157448af17dc36af9bb7112324b Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Tue, 3 Jan 2023 21:04:04 +0000 Subject: [PATCH] fix: unify foreign user fetch into one method --- .../src/routes/servers/member_fetch_all.rs | 15 ++------------- .../quark/src/impl/generic/channels/message.rs | 2 +- crates/quark/src/impl/generic/users/user.rs | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/crates/delta/src/routes/servers/member_fetch_all.rs b/crates/delta/src/routes/servers/member_fetch_all.rs index aa397a13..9ab8870b 100644 --- a/crates/delta/src/routes/servers/member_fetch_all.rs +++ b/crates/delta/src/routes/servers/member_fetch_all.rs @@ -1,8 +1,6 @@ use revolt_quark::{ models::{Member, User}, - perms, - presence::presence_filter_online, - Db, Ref, Result, + perms, Db, Ref, Result, }; use rocket::serde::json::Json; @@ -47,16 +45,7 @@ pub async fn req( user_ids.push(member.id.user.clone()); } - let online_ids = presence_filter_online(&user_ids).await; - let mut users = db - .fetch_users(&user_ids) - .await? - .into_iter() - .map(|mut user| { - user.online = Some(online_ids.contains(&user.id)); - user.foreign() - }) - .collect::>(); + let mut users = User::fetch_foreign_users(db, &user_ids).await?; // Ensure the lists match up exactly. members.sort_by(|a, b| a.id.user.cmp(&b.id.user)); diff --git a/crates/quark/src/impl/generic/channels/message.rs b/crates/quark/src/impl/generic/channels/message.rs index 20318da6..9b876c79 100644 --- a/crates/quark/src/impl/generic/channels/message.rs +++ b/crates/quark/src/impl/generic/channels/message.rs @@ -383,7 +383,7 @@ impl BulkMessageResponse { ) -> Result { if let Some(true) = include_users { let user_ids = messages.get_user_ids(); - let users = db.fetch_users(&user_ids).await?; + let users = User::fetch_foreign_users(db, &user_ids).await?; Ok(match channel { Channel::TextChannel { server, .. } | Channel::VoiceChannel { server, .. } => { diff --git a/crates/quark/src/impl/generic/users/user.rs b/crates/quark/src/impl/generic/users/user.rs index 1fea5b90..76d2603b 100644 --- a/crates/quark/src/impl/generic/users/user.rs +++ b/crates/quark/src/impl/generic/users/user.rs @@ -4,6 +4,7 @@ use crate::models::user::{ }; use crate::permissions::defn::UserPerms; use crate::permissions::r#impl::user::get_relationship; +use crate::presence::presence_filter_online; use crate::{perms, Database, Error, Result}; use futures::try_join; @@ -67,6 +68,7 @@ impl User { } /// Mutate the user object to remove redundant information + #[must_use] pub fn foreign(mut self) -> User { self.profile = None; self.relations = None; @@ -94,6 +96,21 @@ impl User { self } + /// Fetch foreign users by a list of IDs + pub async fn fetch_foreign_users(db: &Database, user_ids: &[String]) -> Result> { + let online_ids = presence_filter_online(user_ids).await; + + Ok(db + .fetch_users(user_ids) + .await? + .into_iter() + .map(|mut user| { + user.online = Some(online_ids.contains(&user.id)); + user.foreign() + }) + .collect::>()) + } + /// Mutate the user object to include relationship (if it does not already exist) #[must_use] pub fn with_relationship(self, perspective: &User) -> User {