add event_bus_typed

This commit is contained in:
2026-09-23 10:36:14 +02:00
parent 3780092fa6
commit ab97dcc8d9
35 changed files with 1376 additions and 3228 deletions
+26 -12
View File
@@ -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)
}