Compare commits

...
Sign in to create a new pull request.

3 commits

Author SHA1 Message Date
192ac4e1e7 feat: add function for message editing
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful
2025-07-21 01:47:49 +02:00
bfd49046aa Merge branch 'main' into wip/message-editing 2025-07-21 01:42:49 +02:00
b7b07141f9 feat: add needed DB entries for editing 2025-07-12 19:43:36 +02:00
5 changed files with 25 additions and 0 deletions

View file

@ -0,0 +1,2 @@
-- This file should undo anything in `up.sql`
ALTER TABLE messages DROP COLUMN is_edited;

View file

@ -0,0 +1,2 @@
-- Your SQL goes here
ALTER TABLE messages ADD COLUMN is_edited BOOLEAN NOT NULL DEFAULT FALSE;

View file

@ -285,6 +285,7 @@ impl Channel {
user_uuid, user_uuid,
message, message,
reply_to, reply_to,
is_edited: false,
}; };
let mut conn = app_state.pool.get().await?; let mut conn = app_state.pool.get().await?;
@ -297,6 +298,22 @@ impl Channel {
message.build(app_state).await message.build(app_state).await
} }
pub async fn edit_message(&self, app_state: &AppState, user_uuid: Uuid, message_uuid: Uuid, message: String) -> Result<Message, Error> {
use messages::dsl;
let mut conn = app_state.pool.get().await?;
let message: MessageBuilder = update(messages::table)
.filter(dsl::user_uuid.eq(user_uuid))
.filter(dsl::uuid.eq(message_uuid))
.set((dsl::is_edited.eq(true), dsl::message.eq(message)))
.returning(MessageBuilder::as_select())
.get_result(&mut conn)
.await?;
message.build(app_state).await
}
pub async fn set_name(&mut self, app_state: &AppState, new_name: String) -> Result<(), Error> { pub async fn set_name(&mut self, app_state: &AppState, new_name: String) -> Result<(), Error> {
if !CHANNEL_REGEX.is_match(&new_name) { if !CHANNEL_REGEX.is_match(&new_name) {
return Err(Error::BadRequest("Channel name is invalid".to_string())); return Err(Error::BadRequest("Channel name is invalid".to_string()));

View file

@ -15,6 +15,7 @@ pub struct MessageBuilder {
pub user_uuid: Uuid, pub user_uuid: Uuid,
pub message: String, pub message: String,
pub reply_to: Option<Uuid>, pub reply_to: Option<Uuid>,
pub is_edited: bool,
} }
impl MessageBuilder { impl MessageBuilder {
@ -27,6 +28,7 @@ impl MessageBuilder {
user_uuid: self.user_uuid, user_uuid: self.user_uuid,
message: self.message.clone(), message: self.message.clone(),
reply_to: self.reply_to, reply_to: self.reply_to,
is_edited: self.is_edited,
user, user,
}) })
} }
@ -39,5 +41,6 @@ pub struct Message {
user_uuid: Uuid, user_uuid: Uuid,
message: String, message: String,
reply_to: Option<Uuid>, reply_to: Option<Uuid>,
is_edited: bool,
user: User, user: User,
} }

View file

@ -94,6 +94,7 @@ diesel::table! {
#[max_length = 4000] #[max_length = 4000]
message -> Varchar, message -> Varchar,
reply_to -> Nullable<Uuid>, reply_to -> Nullable<Uuid>,
is_edited -> Bool,
} }
} }