From e7a250357f7c8eeb90ba0db5bf18041573cfcdf3 Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Mon, 27 Apr 2026 16:40:28 +0800 Subject: [PATCH] fix(room): add cascade deletes and fix QuerySelect trait import - Import room_message_reaction, room_message_edit_history, room_notifications modules - Fix room_message_edit_history: no Room column, use subquery via messages - Change publish_project_room_event from Result to () handling - Add QuerySelect import for limit() method in workers.rs --- libs/room/src/room.rs | 37 ++++++++++++++------------------ libs/room/src/service/workers.rs | 2 +- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/libs/room/src/room.rs b/libs/room/src/room.rs index 25aef6c..9ea27ba 100644 --- a/libs/room/src/room.rs +++ b/libs/room/src/room.rs @@ -4,6 +4,7 @@ use crate::ws_context::WsUserContext; use chrono::Utc; use models::rooms::{ RoomMemberRole, room, room_ai, room_category, room_member, room_message, room_pin, room_thread, + room_message_reaction, room_message_edit_history, room_notifications, }; use models::projects::{project_members, MemberRole as Role}; use queue::ProjectRoomEvent; @@ -212,13 +213,10 @@ impl RoomService { seq: None, timestamp: Utc::now(), }; - if let Err(e) = self + let _ = self .queue .publish_project_room_event(project.id, event) - .await - { - tracing::warn!(error = %e, "failed to publish room created event"); - } + .await; self.notify_project_members( project.id, @@ -293,13 +291,10 @@ impl RoomService { seq: None, timestamp: Utc::now(), }; - if let Err(e) = self + let _ = self .queue .publish_project_room_event(updated.project, event) - .await - { - tracing::warn!(error = %e, "failed to publish room event"); - } + .await; } if moved { let event = ProjectRoomEvent { @@ -311,13 +306,10 @@ impl RoomService { seq: None, timestamp: Utc::now(), }; - if let Err(e) = self + let _ = self .queue .publish_project_room_event(updated.project, event) - .await - { - tracing::warn!(error = %e, "failed to publish room event"); - } + .await; } Ok(super::RoomResponse::from(updated)) @@ -361,8 +353,14 @@ impl RoomService { .exec(&txn) .await?; + // room_message_edit_history has no room column; delete via messages in this room + let subquery = room_message::Entity::find() + .filter(room_message::Column::Room.eq(room_id)) + .select_only() + .column(room_message::Column::Id) + .into_query(); room_message_edit_history::Entity::delete_many() - .filter(room_message_edit_history::Column::Room.eq(room_id)) + .filter(room_message_edit_history::Column::Message.in_subquery(subquery)) .exec(&txn) .await?; @@ -402,13 +400,10 @@ impl RoomService { seq: None, timestamp: Utc::now(), }; - if let Err(e) = self + let _ = self .queue .publish_project_room_event(project_id, event) - .await - { - tracing::warn!(error = %e, "failed to publish room deleted event"); - } + .await; self.notify_project_members( project_id, diff --git a/libs/room/src/service/workers.rs b/libs/room/src/service/workers.rs index f1d7e7e..74baa17 100644 --- a/libs/room/src/service/workers.rs +++ b/libs/room/src/service/workers.rs @@ -5,7 +5,7 @@ use db::cache::AppCache; use db::database::AppDatabase; use models::rooms::room; use queue::{AgentTaskEvent, MessageProducer}; -use sea_orm::EntityTrait; +use sea_orm::{EntityTrait, QuerySelect}; use uuid::Uuid; use crate::connection::{