fix: unify foreign user fetch into one method
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
use revolt_quark::{
|
use revolt_quark::{
|
||||||
models::{Member, User},
|
models::{Member, User},
|
||||||
perms,
|
perms, Db, Ref, Result,
|
||||||
presence::presence_filter_online,
|
|
||||||
Db, Ref, Result,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use rocket::serde::json::Json;
|
use rocket::serde::json::Json;
|
||||||
@@ -47,16 +45,7 @@ pub async fn req(
|
|||||||
user_ids.push(member.id.user.clone());
|
user_ids.push(member.id.user.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
let online_ids = presence_filter_online(&user_ids).await;
|
let mut users = User::fetch_foreign_users(db, &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::<Vec<User>>();
|
|
||||||
|
|
||||||
// Ensure the lists match up exactly.
|
// Ensure the lists match up exactly.
|
||||||
members.sort_by(|a, b| a.id.user.cmp(&b.id.user));
|
members.sort_by(|a, b| a.id.user.cmp(&b.id.user));
|
||||||
|
|||||||
@@ -383,7 +383,7 @@ impl BulkMessageResponse {
|
|||||||
) -> Result<BulkMessageResponse> {
|
) -> Result<BulkMessageResponse> {
|
||||||
if let Some(true) = include_users {
|
if let Some(true) = include_users {
|
||||||
let user_ids = messages.get_user_ids();
|
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 {
|
Ok(match channel {
|
||||||
Channel::TextChannel { server, .. } | Channel::VoiceChannel { server, .. } => {
|
Channel::TextChannel { server, .. } | Channel::VoiceChannel { server, .. } => {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use crate::models::user::{
|
|||||||
};
|
};
|
||||||
use crate::permissions::defn::UserPerms;
|
use crate::permissions::defn::UserPerms;
|
||||||
use crate::permissions::r#impl::user::get_relationship;
|
use crate::permissions::r#impl::user::get_relationship;
|
||||||
|
use crate::presence::presence_filter_online;
|
||||||
use crate::{perms, Database, Error, Result};
|
use crate::{perms, Database, Error, Result};
|
||||||
|
|
||||||
use futures::try_join;
|
use futures::try_join;
|
||||||
@@ -67,6 +68,7 @@ impl User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Mutate the user object to remove redundant information
|
/// Mutate the user object to remove redundant information
|
||||||
|
#[must_use]
|
||||||
pub fn foreign(mut self) -> User {
|
pub fn foreign(mut self) -> User {
|
||||||
self.profile = None;
|
self.profile = None;
|
||||||
self.relations = None;
|
self.relations = None;
|
||||||
@@ -94,6 +96,21 @@ impl User {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Fetch foreign users by a list of IDs
|
||||||
|
pub async fn fetch_foreign_users(db: &Database, user_ids: &[String]) -> Result<Vec<User>> {
|
||||||
|
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::<Vec<User>>())
|
||||||
|
}
|
||||||
|
|
||||||
/// Mutate the user object to include relationship (if it does not already exist)
|
/// Mutate the user object to include relationship (if it does not already exist)
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn with_relationship(self, perspective: &User) -> User {
|
pub fn with_relationship(self, perspective: &User) -> User {
|
||||||
|
|||||||
Reference in New Issue
Block a user