From fa3bc56ef4b7eea2e12d3efc687aeea3c353c735 Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Tue, 25 May 2021 15:03:49 +0100
Subject: [PATCH] Channels: Add option to return users in message query.

---
 src/routes/channels/message_query.rs | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs
index 903d811..3206f23 100644
--- a/src/routes/channels/message_query.rs
+++ b/src/routes/channels/message_query.rs
@@ -1,3 +1,5 @@
+use std::collections::HashSet;
+
 use crate::database::*;
 use crate::util::result::{Error, Result};
 
@@ -26,6 +28,7 @@ pub struct Options {
     #[validate(length(min = 26, max = 26))]
     after: Option<String>,
     sort: Option<Sort>,
+    include_users: Option<bool>
 }
 
 #[get("/<target>/messages?<options..>")]
@@ -87,5 +90,19 @@ pub async fn req(user: User, target: Ref, options: Form<Options>) -> Result<Json
         }
     }
 
-    Ok(json!(messages))
+    if options.include_users.unwrap_or_else(|| false) {
+        let mut ids = HashSet::new();
+        for message in &messages {
+            ids.insert(message.author.clone());
+        }
+
+        let user_ids = ids.into_iter().collect();
+
+        Ok(json!({
+            "messages": messages,
+            "users": user.fetch_multiple_users(user_ids).await?
+        }))
+    } else {
+        Ok(json!(messages))
+    }
 }
-- 
GitLab