init
This commit is contained in:
+62
-8
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user