diff --git a/set_version.sh b/set_version.sh index 7f52c3e0457cca319a9285e21b5323a5c9a71ec8..570c0159e74cce496ec42637d93f07ce96e880e6 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.5.1-alpha.8-patch.0 +export version=0.5.1-alpha.9 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index 714c17ecb85ab13c78bfb4ea93325b0876936bd2..50521624072f9ee8834b25a5430cca0ea7d885c8 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -159,7 +159,7 @@ impl User { /// Utility function for checking claimed usernames. pub async fn is_username_taken(username: &str) -> Result<bool> { - if username.to_lowercase() == "revolt" || username.to_lowercase() == "admin" { + if username.to_lowercase() == "revolt" || username.to_lowercase() == "admin" || username.to_lowercase() == "system" { return Ok(true); } diff --git a/src/routes/channels/message_search.rs b/src/routes/channels/message_search.rs index 214d937bd31baed60b130481a376aa168ed2d1cf..352093ed97ac125ff636160d34bc5b178803e224 100644 --- a/src/routes/channels/message_search.rs +++ b/src/routes/channels/message_search.rs @@ -19,6 +19,12 @@ pub enum Sort { Oldest, } +impl Default for Sort { + fn default() -> Sort { + Sort::Relevance + } +} + #[derive(Validate, Serialize, Deserialize, FromForm)] pub struct Options { #[validate(length(min = 1, max = 64))] @@ -30,7 +36,8 @@ pub struct Options { before: Option<String>, #[validate(length(min = 26, max = 26))] after: Option<String>, - sort: Option<Sort>, + #[serde(default = "Sort::default")] + sort: Sort, include_users: Option<bool>, } @@ -54,26 +61,60 @@ pub async fn req(user: User, target: Ref, options: Json<Options>) -> Result<Json let mut messages = vec![]; let limit = options.limit.unwrap_or(50); + let mut filter = doc! { + "channel": target.id(), + "$text": { + "$search": &options.query + } + }; + + if let Some(doc) = match (&options.before, &options.after) { + (Some(before), Some(after)) => Some(doc! { + "lt": before, + "gt": after + }), + (Some(before), _) => Some(doc! { + "lt": before + }), + (_, Some(after)) => Some(doc! { + "gt": after + }), + _ => None + } { + filter.insert("_id", doc); + } + let mut cursor = get_collection("messages") .find( - doc! { - "channel": target.id(), - "$text": { - "$search": &options.query - } - }, + filter, FindOptions::builder() - .projection(doc! { - "score": { - "$meta": "textScore" + .projection( + if let Sort::Relevance = &options.sort { + doc! { + "score": { + "$meta": "textScore" + } + } + } else { + doc! {} } - }) + ) .limit(limit) - .sort(doc! { - "score": { - "$meta": "textScore" + .sort( + match &options.sort { + Sort::Relevance => doc! { + "score": { + "$meta": "textScore" + } + }, + Sort::Latest => doc! { + "_id": -1 + }, + Sort::Oldest => doc! { + "_id": 1 + } } - }) + ) .build(), ) .await diff --git a/src/version.rs b/src/version.rs index d73aeccd3e08d26bbda2a7988058e174399c128b..1066b72df53899205b43d8dce29631668dde2a9e 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.5.1-alpha.8-patch.0"; +pub const VERSION: &str = "0.5.1-alpha.9";