This commit is contained in:
2026-08-09 10:30:54 +02:00
parent 93800e8460
commit 20beea24d5
11 changed files with 325 additions and 61 deletions
+62 -8
View File
@@ -1,7 +1,10 @@
use crate::services::ServicesContext;
use crate::domain::events::message::{
MessageCreatedEvent, MessageDeletedEvent, MessageUpdatedEvent,
};
use crate::models::{channel, message};
use crate::services::ServicesContext;
use event_bus::Scope;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, QuerySelect, TransactionTrait, Set};
use sea_orm::{ActiveModelTrait, EntityTrait, QuerySelect, Set, TransactionTrait};
use std::sync::Arc;
use uuid::Uuid;
@@ -51,7 +54,15 @@ impl MessageService {
scopes.push(Scope::uuid("server", server_id));
}
event_bus.emit_scoped("message_created", scopes, msg.clone());
event_bus.emit_scoped(
"message_created",
scopes,
MessageCreatedEvent {
server_id,
channel_id: msg.channel_id,
message: msg.clone(),
},
);
Ok(msg)
}
@@ -78,7 +89,27 @@ impl MessageService {
txn.commit().await?;
event_bus.emit("message_updated", msg.clone());
let server_id = channel::Entity::find_by_id(msg.channel_id)
.select_only()
.column(channel::Column::ServerId)
.into_tuple::<Option<Uuid>>()
.one(db)
.await?
.flatten();
let mut scopes = vec![Scope::uuid("channel", msg.channel_id)];
if let Some(server_id) = server_id {
scopes.push(Scope::uuid("server", server_id));
}
event_bus.emit_scoped(
"message_updated",
scopes,
MessageUpdatedEvent {
server_id,
channel_id: msg.channel_id,
message: msg.clone(),
},
);
Ok(msg)
}
@@ -89,16 +120,39 @@ impl MessageService {
let txn = db.begin().await?;
let res = message::Entity::delete_by_id(id)
.exec(&txn)
.await?;
let existing = message::Entity::find_by_id(id).one(db).await?;
let Some(existing) = existing else {
return Ok(false);
};
let server_id = channel::Entity::find_by_id(existing.channel_id)
.select_only()
.column(channel::Column::ServerId)
.into_tuple::<Option<Uuid>>()
.one(db)
.await?
.flatten();
let res = message::Entity::delete_by_id(id).exec(&txn).await?;
let deleted = res.rows_affected > 0;
txn.commit().await?;
if deleted {
event_bus.emit("message_deleted", id);
let mut scopes = vec![Scope::uuid("channel", existing.channel_id)];
if let Some(server_id) = server_id {
scopes.push(Scope::uuid("server", server_id));
}
event_bus.emit_scoped(
"message_deleted",
scopes,
MessageDeletedEvent {
server_id,
channel_id: existing.channel_id,
message: existing,
},
);
}
Ok(deleted)