From c5d14ac063895feaa81f27c2af1d61bf53dc90fd Mon Sep 17 00:00:00 2001 From: Radical Date: Sat, 17 May 2025 11:04:48 +0200 Subject: [PATCH] feat: add message storing in DB UNTESTED! Should work but might be really slow --- .../v1/servers/uuid/channels/uuid/socket.rs | 1 + src/structs.rs | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/api/v1/servers/uuid/channels/uuid/socket.rs b/src/api/v1/servers/uuid/channels/uuid/socket.rs index 8f8a15c..5b9fa73 100644 --- a/src/api/v1/servers/uuid/channels/uuid/socket.rs +++ b/src/api/v1/servers/uuid/channels/uuid/socket.rs @@ -97,6 +97,7 @@ pub async fn echo(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, stream: web:: Ok(AggregatedMessage::Text(text)) => { // echo text message redis::cmd("PUBLISH").arg(&[channel_uuid.to_string(), text.to_string()]).exec_async(&mut conn).await.unwrap(); + channel.new_message(&data.pool, uuid, text.to_string()).await.unwrap(); } Ok(AggregatedMessage::Binary(bin)) => { diff --git a/src/structs.rs b/src/structs.rs index ac34e9d..cde4f7e 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -186,6 +186,27 @@ impl Channel { Ok(message_builders.iter().map(|b| b.build()).collect()) } + + pub async fn new_message(&self, pool: &Pool, user_uuid: Uuid, message: String) -> Result { + let message_uuid = Uuid::now_v7(); + + let row = sqlx::query(&format!("INSERT INTO messages (uuid, channel_uuid, user_uuid, message) VALUES ('{}', '{}', '{}', $1", message_uuid, self.uuid, user_uuid)) + .bind(&message) + .execute(pool) + .await; + + if let Err(error) = row { + error!("{}", error); + return Err(HttpResponse::InternalServerError().finish()); + } + + Ok(Message { + uuid: message_uuid, + channel_uuid: self.uuid, + user_uuid, + message, + }) + } } #[derive(Clone, Copy)]