init
This commit is contained in:
@@ -41,4 +41,6 @@ impl PermissionSyncService {
|
||||
event_bus,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn listen(&self) {}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
pub mod channel;
|
||||
pub mod message;
|
||||
pub mod server;
|
||||
@@ -0,0 +1,13 @@
|
||||
use crate::models::prelude::Server;
|
||||
|
||||
pub struct ServerCreated {
|
||||
server: Server,
|
||||
}
|
||||
|
||||
pub struct ServerUpdated {
|
||||
server: Server,
|
||||
}
|
||||
|
||||
pub struct ServerDeleted {
|
||||
server: Server,
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
pub mod events;
|
||||
@@ -11,3 +11,5 @@ pub mod udp;
|
||||
|
||||
pub mod auth;
|
||||
pub mod metrics;
|
||||
|
||||
pub mod domain;
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user