diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 07c2ecacf956b977ec2a2f76cb5b599a348b47a8..7d107ffe965057b47f08c4ae4e01c5a346039fe7 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 7b3dfed09b59f496a4bfdefed1ee435bad666ea3..2869d177ad5f790b330566f6ceb73db63c92d5aa 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 8d33a14cabc502a00b0d3290179d6b1dc511e088..668dfe095d5f348d648a37d5c7fdebadd3d539f5 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<Data>) -> 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 bb6aa70f40654291a6f4c815b3ae789af63e2f75..e00c8afc71fb135482e93837a3ebdcf6207efbf1 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 9f7ea61731a5dc65cdf5ffdea5bc5af94cbaf2d4..640bb8efa483cdc7c3b3a69d94e9994f555d7b02 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 {