add event_bus_typed
This commit is contained in:
+26
-12
@@ -1,4 +1,8 @@
|
||||
use crate::models::role;
|
||||
use crate::domain::events::role::{
|
||||
RoleCreatedEvent, RoleDeletedEvent, RoleUpdatedEvent, RoleUserCreatedEvent,
|
||||
RoleUserDeletedEvent,
|
||||
};
|
||||
use crate::models::{role, role_user};
|
||||
use crate::services::ServicesContext;
|
||||
use sea_orm::{ActiveModelTrait, EntityTrait, TransactionTrait};
|
||||
use std::sync::Arc;
|
||||
@@ -27,7 +31,7 @@ impl RoleService {
|
||||
|
||||
txn.commit().await?;
|
||||
|
||||
event_bus.emit("role_created", role.clone());
|
||||
event_bus.emit(RoleCreatedEvent { role: role.clone() });
|
||||
|
||||
Ok(role)
|
||||
}
|
||||
@@ -45,7 +49,7 @@ impl RoleService {
|
||||
|
||||
txn.commit().await?;
|
||||
|
||||
event_bus.emit("role_updated", role.clone());
|
||||
event_bus.emit(RoleUpdatedEvent { role: role.clone() });
|
||||
|
||||
Ok(role)
|
||||
}
|
||||
@@ -56,14 +60,15 @@ impl RoleService {
|
||||
|
||||
let txn = db.begin().await?;
|
||||
|
||||
let existing = role::Entity::find_by_id(id).one(&txn).await?;
|
||||
let res = role::Entity::delete_by_id(id).exec(&txn).await?;
|
||||
|
||||
let deleted = res.rows_affected > 0;
|
||||
|
||||
txn.commit().await?;
|
||||
|
||||
if deleted {
|
||||
event_bus.emit("role_deleted", id);
|
||||
if let Some(role) = existing.filter(|_| deleted) {
|
||||
event_bus.emit(RoleDeletedEvent { role });
|
||||
}
|
||||
|
||||
Ok(deleted)
|
||||
@@ -82,9 +87,14 @@ impl RoleService {
|
||||
.add_member(role_id, user_id)
|
||||
.await?;
|
||||
if added {
|
||||
self.service_context
|
||||
.event_bus
|
||||
.emit("role_user_created", (role_id, user_id, server_id));
|
||||
let role_user = role_user::Entity::find_by_id((role_id, user_id))
|
||||
.one(&self.service_context.repositories.server.context.db)
|
||||
.await?
|
||||
.ok_or_else(|| anyhow::anyhow!("Role membership not found"))?;
|
||||
self.service_context.event_bus.emit(RoleUserCreatedEvent {
|
||||
role_user,
|
||||
server_id,
|
||||
});
|
||||
}
|
||||
Ok(added)
|
||||
}
|
||||
@@ -95,16 +105,20 @@ impl RoleService {
|
||||
user_id: Uuid,
|
||||
server_id: Uuid,
|
||||
) -> Result<bool, anyhow::Error> {
|
||||
let existing = role_user::Entity::find_by_id((role_id, user_id))
|
||||
.one(&self.service_context.repositories.server.context.db)
|
||||
.await?;
|
||||
let removed = self
|
||||
.service_context
|
||||
.repositories
|
||||
.role
|
||||
.remove_member(role_id, user_id)
|
||||
.await?;
|
||||
if removed {
|
||||
self.service_context
|
||||
.event_bus
|
||||
.emit("role_user_deleted", (role_id, user_id, server_id));
|
||||
if let Some(role_user) = existing.filter(|_| removed) {
|
||||
self.service_context.event_bus.emit(RoleUserDeletedEvent {
|
||||
role_user,
|
||||
server_id,
|
||||
});
|
||||
}
|
||||
Ok(removed)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user