post services integrations
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user