From a319e72655a7886a17c709543798286767f3249a Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Mon, 3 May 2021 16:35:59 +0100
Subject: [PATCH] Add a way to choose message fetch sort.

---
 set_version.sh                       |  2 +-
 src/routes/channels/edit_channel.rs  |  4 ----
 src/routes/channels/message_query.rs | 10 +++++++++-
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/set_version.sh b/set_version.sh
index 43821b0..d510495 100755
--- a/set_version.sh
+++ b/set_version.sh
@@ -1,3 +1,3 @@
 #!/bin/bash
-export version=0.4.1-alpha.6
+export version=0.4.1-alpha.7
 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs
diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs
index ff5c473..4c680e1 100644
--- a/src/routes/channels/edit_channel.rs
+++ b/src/routes/channels/edit_channel.rs
@@ -26,10 +26,6 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> {
     data.validate()
         .map_err(|error| Error::FailedValidation { error })?;
 
-    if data.name.is_none() && data.description.is_none() && data.icon.is_none() && data.remove.is_none() {
-        return Ok(());
-    }
-
     let target = target.fetch_channel().await?;
     let perm = permissions::PermissionCalculator::new(&user)
         .with_channel(&target)
diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs
index dadf8b5..bed171c 100644
--- a/src/routes/channels/message_query.rs
+++ b/src/routes/channels/message_query.rs
@@ -11,6 +11,12 @@ use rocket_contrib::json::JsonValue;
 use serde::{Deserialize, Serialize};
 use validator::Validate;
 
+#[derive(Serialize, Deserialize, FromFormValue)]
+pub enum Sort {
+    Latest,
+    Oldest
+}
+
 #[derive(Validate, Serialize, Deserialize, FromForm)]
 pub struct Options {
     #[validate(range(min = 1, max = 100))]
@@ -19,6 +25,7 @@ pub struct Options {
     before: Option<String>,
     #[validate(length(min = 26, max = 26))]
     after: Option<String>,
+    sort: Option<Sort>
 }
 
 #[get("/<target>/messages?<options..>")]
@@ -47,13 +54,14 @@ pub async fn req(user: User, target: Ref, options: Form<Options>) -> Result<Json
         query.insert("_id", doc! { "$gt": after });
     }
 
+    let sort = if let Sort::Latest = options.sort.as_ref().unwrap_or_else(|| &Sort::Latest) { -1 } else { 1 };
     let mut cursor = get_collection("messages")
         .find(
             query,
             FindOptions::builder()
                 .limit(options.limit.unwrap_or(50))
                 .sort(doc! {
-                    "_id": -1
+                    "_id": sort
                 })
                 .build(),
         )
-- 
GitLab