From b740e2884d306760a15723bc82cfa050ba17c020 Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Sun, 19 Apr 2026 01:04:15 +0800 Subject: [PATCH] feat(room): auto-inherit project members as room members on room creation --- libs/room/src/room.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/libs/room/src/room.rs b/libs/room/src/room.rs index dc6d3ba..125e5fa 100644 --- a/libs/room/src/room.rs +++ b/libs/room/src/room.rs @@ -5,6 +5,7 @@ use chrono::Utc; use models::rooms::{ RoomMemberRole, room, room_ai, room_category, room_member, room_message, room_pin, room_thread, }; +use models::projects::{project_members, MemberRole as Role}; use queue::ProjectRoomEvent; use sea_orm::*; use uuid::Uuid; @@ -122,6 +123,37 @@ impl RoomService { .insert(&txn) .await?; + // Inherit project members into room members + let project_members_list = project_members::Entity::find() + .filter(project_members::Column::Project.eq(project.id)) + .all(&txn) + .await?; + + for pm in project_members_list { + if pm.user != user_id { + let role = match pm.scope_role() { + Ok(Role::Owner) => RoomMemberRole::Owner, + Ok(Role::Admin) => RoomMemberRole::Admin, + Ok(_) | Err(_) => RoomMemberRole::Member, + }; + + room_member::ActiveModel { + room: Set(room_model.id), + user: Set(pm.user), + role: Set(role), + first_msg_in: Set(None), + joined_at: Set(Some(Utc::now())), + last_read_seq: Set(None), + do_not_disturb: Set(false), + dnd_start_hour: Set(None), + dnd_end_hour: Set(None), + } + .insert(&txn) + .await + .ok(); + } + } + txn.commit().await?; self.spawn_room_workers(room_model.id);