feat(room): auto-add new project members to all rooms
This commit is contained in:
parent
b8e5cbbb69
commit
e612043e5f
@ -369,6 +369,9 @@ impl AppService {
|
|||||||
joined_at: Set(Utc::now()),
|
joined_at: Set(Utc::now()),
|
||||||
};
|
};
|
||||||
member.insert(&txn).await?;
|
member.insert(&txn).await?;
|
||||||
|
|
||||||
|
// Auto-add user to all rooms in the project
|
||||||
|
let _ = Self::add_user_to_all_project_rooms(&txn, project.id, user_uid).await;
|
||||||
}
|
}
|
||||||
let log = project_audit_log::ActiveModel {
|
let log = project_audit_log::ActiveModel {
|
||||||
project: Set(project.id),
|
project: Set(project.id),
|
||||||
|
|||||||
@ -309,6 +309,9 @@ impl AppService {
|
|||||||
joined_at: Set(Utc::now()),
|
joined_at: Set(Utc::now()),
|
||||||
};
|
};
|
||||||
member.insert(&txn).await?;
|
member.insert(&txn).await?;
|
||||||
|
|
||||||
|
// Auto-add user to all rooms in the project
|
||||||
|
let _ = Self::add_user_to_all_project_rooms(&txn, project.id, request_user).await;
|
||||||
} else {
|
} else {
|
||||||
active_request.status = Set("rejected".to_string());
|
active_request.status = Set("rejected".to_string());
|
||||||
active_request.processed_by = Set(Some(user_uid));
|
active_request.processed_by = Set(Some(user_uid));
|
||||||
|
|||||||
@ -2,8 +2,10 @@ use crate::AppService;
|
|||||||
use crate::error::AppError;
|
use crate::error::AppError;
|
||||||
use chrono::Utc;
|
use chrono::Utc;
|
||||||
use models::projects::{MemberRole, project_audit_log, project_members};
|
use models::projects::{MemberRole, project_audit_log, project_members};
|
||||||
|
use models::rooms::{room, room_member, RoomMemberRole};
|
||||||
use models::users::user;
|
use models::users::user;
|
||||||
use sea_orm::*;
|
use sea_orm::*;
|
||||||
|
use sea_orm::sea_query::OnConflict;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use session::Session;
|
use session::Session;
|
||||||
use utoipa::ToSchema;
|
use utoipa::ToSchema;
|
||||||
@ -315,4 +317,43 @@ impl AppService {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add a user to all rooms in a project (used automatically when a user joins a project).
|
||||||
|
pub async fn add_user_to_all_project_rooms(
|
||||||
|
db: &impl ConnectionTrait,
|
||||||
|
project_id: Uuid,
|
||||||
|
user_id: Uuid,
|
||||||
|
) -> Result<(), AppError> {
|
||||||
|
let rooms: Vec<room::Model> = room::Entity::find()
|
||||||
|
.filter(room::Column::Project.eq(project_id))
|
||||||
|
.all(db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if rooms.is_empty() {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
let now = Utc::now();
|
||||||
|
let values: Vec<room_member::ActiveModel> = rooms
|
||||||
|
.iter()
|
||||||
|
.map(|r| room_member::ActiveModel {
|
||||||
|
room: Set(r.id),
|
||||||
|
user: Set(user_id),
|
||||||
|
role: Set(RoomMemberRole::Member),
|
||||||
|
first_msg_in: Set(None),
|
||||||
|
joined_at: Set(Some(now)),
|
||||||
|
last_read_seq: Set(None),
|
||||||
|
do_not_disturb: Set(false),
|
||||||
|
dnd_start_hour: Set(None),
|
||||||
|
dnd_end_hour: Set(None),
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
room_member::Entity::insert_many(values)
|
||||||
|
.on_conflict(OnConflict::new().do_nothing().to_owned())
|
||||||
|
.exec(db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user