This commit is contained in:
2026-08-29 18:39:28 +02:00
parent 88ad3c389f
commit 9551e90678
17 changed files with 642 additions and 269 deletions
+48 -6
View File
@@ -1,3 +1,5 @@
use crate::domain::events::channel::{ChannelCreatedEvent, ChannelDeletedEvent};
use crate::models::server;
use crate::repositories::Repositories;
use crate::services::ServicesContext;
use std::sync::Arc;
@@ -71,8 +73,8 @@ impl PermissionSyncService {
event_bus.on_async_with(
"server_created",
repositories.clone(),
move |repositories, server_id: Uuid| async move {
Self::sync_server(repositories, server_id).await;
move |repositories, server: server::Model| async move {
Self::sync_server(repositories, server.id).await;
},
);
@@ -139,16 +141,20 @@ impl PermissionSyncService {
event_bus.on_async_with(
"channel_created",
repositories.clone(),
move |repositories, server_id: Uuid| async move {
Self::sync_server(repositories, server_id).await;
move |repositories, event: ChannelCreatedEvent| async move {
if let Some(server_id) = event.channel.server_id {
Self::sync_server(repositories, server_id).await;
}
},
);
event_bus.on_async_with(
"channel_deleted",
repositories.clone(),
move |repositories, server_id: Uuid| async move {
Self::sync_server(repositories, server_id).await;
move |repositories, event: ChannelDeletedEvent| async move {
if let Some(server_id) = event.channel.server_id {
Self::sync_server(repositories, server_id).await;
}
},
);
@@ -167,6 +173,42 @@ impl PermissionSyncService {
Self::sync_user(repositories, user_id, server_id).await;
},
);
event_bus.on_async_with(
"channel_user_permission_created",
repositories.clone(),
move |repositories, (channel_id, user_id, _permissions): (Uuid, Uuid, u64)| async move {
if let Some(channel) = repositories
.channel
.get_by_id(channel_id)
.await
.ok()
.flatten()
{
if let Some(server_id) = channel.server_id {
Self::sync_user(repositories, user_id, server_id).await;
}
}
},
);
event_bus.on_async_with(
"channel_user_permission_deleted",
repositories,
move |repositories, (channel_id, user_id): (Uuid, Uuid)| async move {
if let Some(channel) = repositories
.channel
.get_by_id(channel_id)
.await
.ok()
.flatten()
{
if let Some(server_id) = channel.server_id {
Self::sync_user(repositories, user_id, server_id).await;
}
}
},
);
}
// -------------------------------------------------------------------------