post services integrations

This commit is contained in:
2026-07-29 18:09:38 +02:00
parent 6cb9acf98b
commit 759bc1dc15
23 changed files with 956 additions and 95 deletions
+73
View File
@@ -0,0 +1,73 @@
use crate::services::ServicesContext;
use crate::models::role;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, TransactionTrait, Set};
use std::sync::Arc;
use uuid::Uuid;
#[derive(Debug, Clone)]
pub struct RoleService {
service_context: Arc<ServicesContext>,
}
impl RoleService {
pub fn new(service_context: Arc<ServicesContext>) -> Self {
Self { service_context }
}
pub async fn create_role(
&self,
active: role::ActiveModel,
) -> Result<role::Model, anyhow::Error> {
let db = &self.service_context.repositories.server.context.db;
let event_bus = &self.service_context.event_bus;
let txn = db.begin().await?;
let group = active.insert(&txn).await?;
txn.commit().await?;
event_bus.emit("group_created", group.clone());
Ok(group)
}
pub async fn update_role(
&self,
active: role::ActiveModel,
) -> Result<role::Model, anyhow::Error> {
let db = &self.service_context.repositories.server.context.db;
let event_bus = &self.service_context.event_bus;
let txn = db.begin().await?;
let group = active.update(&txn).await?;
txn.commit().await?;
event_bus.emit("group_updated", group.clone());
Ok(group)
}
pub async fn delete_role(&self, id: Uuid) -> Result<bool, anyhow::Error> {
let db = &self.service_context.repositories.server.context.db;
let event_bus = &self.service_context.event_bus;
let txn = db.begin().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("group_deleted", id);
}
Ok(deleted)
}
}