From b351ef03328591e2834d16b9aac84f3529d2c01a Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Sun, 17 Apr 2022 10:22:53 +0100 Subject: [PATCH] feat(user dms): open saved messages channel --- src/routes/users/open_dm.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/routes/users/open_dm.rs b/src/routes/users/open_dm.rs index f962a002..938f5e5d 100644 --- a/src/routes/users/open_dm.rs +++ b/src/routes/users/open_dm.rs @@ -9,11 +9,29 @@ use ulid::Ulid; /// # Open Direct Message /// /// Open a DM with another user. +/// +/// If the target is oneself, a saved messages channel is returned. #[openapi(tag = "Direct Messaging")] #[get("//dm")] pub async fn req(db: &State, user: User, target: Ref) -> Result> { let target = target.as_user(db).await?; + // If the target is oneself, open saved messages. + if target.id == user.id { + return if let Ok(channel) = db.find_direct_message_channel(&user.id, &target.id).await { + Ok(Json(channel)) + } else { + let new_channel = Channel::SavedMessages { + id: Ulid::new().to_string(), + user: user.id, + }; + + new_channel.create(db).await?; + Ok(Json(new_channel)) + }; + } + + // Otherwise try to find or create a DM. if let Ok(channel) = db.find_direct_message_channel(&user.id, &target.id).await { Ok(Json(channel)) } else if perms(&user) @@ -25,7 +43,7 @@ pub async fn req(db: &State, user: User, target: Ref) -> Result