This commit is contained in:
2026-07-14 02:51:16 +02:00
parent c96101ec3d
commit b40373f3e3
10 changed files with 120 additions and 16 deletions
+2
View File
@@ -41,4 +41,6 @@ impl PermissionSyncService {
event_bus,
}
}
pub fn listen(&self) {}
}
+17
View File
@@ -0,0 +1,17 @@
use crate::models::prelude::Channel;
use uuid::Uuid;
pub struct ChannelCreated {
server_id: Uuid,
channel: Channel,
}
pub struct ChannelUpdated {
server_id: Uuid,
channel: Channel,
}
pub struct ChannelDeleted {
server_id: Uuid,
channel: Channel,
}
+20
View File
@@ -0,0 +1,20 @@
use crate::models::prelude::Message;
use uuid::Uuid;
pub struct MessageCreated {
server_id: Option<Uuid>,
channel_id: Uuid,
message: Message,
}
pub struct MessageUpdated {
server_id: Option<Uuid>,
channel_id: Uuid,
message: Message,
}
pub struct MessageDeleted {
server_id: Option<Uuid>,
channel_id: Uuid,
message: Message,
}
+3
View File
@@ -0,0 +1,3 @@
pub mod channel;
pub mod message;
pub mod server;
+13
View File
@@ -0,0 +1,13 @@
use crate::models::prelude::Server;
pub struct ServerCreated {
server: Server,
}
pub struct ServerUpdated {
server: Server,
}
pub struct ServerDeleted {
server: Server,
}
+1
View File
@@ -0,0 +1 @@
pub mod events;
+2
View File
@@ -11,3 +11,5 @@ pub mod udp;
pub mod auth;
pub mod metrics;
pub mod domain;
+28 -2
View File
@@ -1,6 +1,7 @@
use super::types::MessageFilter;
use crate::models::message;
use crate::models::{channel, message};
use crate::repositories::{AnyResult, RepositoryContext};
use event_bus::Scope;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, QueryOrder, QuerySelect};
use std::sync::Arc;
@@ -53,7 +54,32 @@ impl MessageRepository {
pub async fn create(&self, active: message::ActiveModel) -> AnyResult<message::Model> {
let message = active.insert(&self.context.db).await?;
self.context.events.emit("message_created", message.clone());
// self.context.events.emit("message_created", message.clone());
// todo : test
// Ici l'évènement est déclencher sur les topic suivant :
// message_created
// channel:_channel_uuid_:message_created
// si server : server:_server_uuid_:message_created
// scoped event
let mut scopes: Vec<Scope> = Vec::new();
scopes.push(Scope::uuid("channel", message.channel_id));
// retrieve related channel and server
let server_id: Option<uuid::Uuid> = channel::Entity::find_by_id(message.channel_id)
.select_only()
.column(channel::Column::ServerId)
.into_tuple::<Option<uuid::Uuid>>()
.one(&self.context.db)
.await?
.flatten();
if let Some(server_id) = server_id {
scopes.push(Scope::uuid("server", server_id));
}
self.context
.events
.emit_scoped("message_created", scopes, message.clone());
Ok(message)
}