diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 07c2ecac..7d107ffe 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -43,6 +43,19 @@ pub enum Content { SystemMessage(SystemMessage), } +impl Content { + pub async fn send_as_system(self, target: &Channel) -> Result<()> { + Message::create( + "00000000000000000000000000".to_string(), + target.id().to_string(), + self, + None + ) + .publish(&target) + .await + } +} + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Message { #[serde(rename = "_id")] diff --git a/src/routes/channels/delete_channel.rs b/src/routes/channels/delete_channel.rs index 7b3dfed0..2869d177 100644 --- a/src/routes/channels/delete_channel.rs +++ b/src/routes/channels/delete_channel.rs @@ -98,15 +98,9 @@ pub async fn req(user: User, target: Ref) -> Result<()> { } .publish(id.clone()); - Message::create( - "00000000000000000000000000".to_string(), - id.clone(), - Content::SystemMessage(SystemMessage::UserLeft { id: user.id }), - None - ) - .publish(&target) - .await - .ok(); + Content::SystemMessage(SystemMessage::UserLeft { id: user.id }) + .send_as_system(&target) + .await.ok(); Ok(()) } diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs index 8d33a14c..668dfe09 100644 --- a/src/routes/channels/edit_channel.rs +++ b/src/routes/channels/edit_channel.rs @@ -112,44 +112,26 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { if let Channel::Group { .. } = &target { if let Some(name) = data.name { - Message::create( - "00000000000000000000000000".to_string(), - id.clone(), - Content::SystemMessage(SystemMessage::ChannelRenamed { - name, - by: user.id.clone(), - }), - None - ) - .publish(&target) - .await - .ok(); + Content::SystemMessage(SystemMessage::ChannelRenamed { + name, + by: user.id.clone(), + }) + .send_as_system(&target) + .await.ok(); } if let Some(_) = data.description { - Message::create( - "00000000000000000000000000".to_string(), - id.clone(), - Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { - by: user.id.clone(), - }), - None - ) - .publish(&target) - .await - .ok(); + Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { + by: user.id.clone(), + }) + .send_as_system(&target) + .await.ok(); } if let Some(_) = data.icon { - Message::create( - "00000000000000000000000000".to_string(), - id.clone(), - Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id }), - None - ) - .publish(&target) - .await - .ok(); + Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id }) + .send_as_system(&target) + .await.ok(); } } diff --git a/src/routes/channels/group_add_member.rs b/src/routes/channels/group_add_member.rs index bb6aa70f..e00c8afc 100644 --- a/src/routes/channels/group_add_member.rs +++ b/src/routes/channels/group_add_member.rs @@ -55,18 +55,12 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<()> { } .publish(id.clone()); - Message::create( - "00000000000000000000000000".to_string(), - id.clone(), - Content::SystemMessage(SystemMessage::UserAdded { - id: member.id, - by: user.id, - }), - None - ) - .publish(&channel) - .await - .ok(); + Content::SystemMessage(SystemMessage::UserAdded { + id: member.id, + by: user.id, + }) + .send_as_system(&channel) + .await.ok(); Ok(()) } else { diff --git a/src/routes/channels/group_remove_member.rs b/src/routes/channels/group_remove_member.rs index 9f7ea617..640bb8ef 100644 --- a/src/routes/channels/group_remove_member.rs +++ b/src/routes/channels/group_remove_member.rs @@ -51,18 +51,12 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<()> { } .publish(id.clone()); - Message::create( - "00000000000000000000000000".to_string(), - id.clone(), - Content::SystemMessage(SystemMessage::UserRemove { - id: member.id, - by: user.id, - }), - None - ) - .publish(&channel) - .await - .ok(); + Content::SystemMessage(SystemMessage::UserRemove { + id: member.id, + by: user.id, + }) + .send_as_system(&channel) + .await.ok(); Ok(()) } else {