use crate::organization::OrganizationMemberCreatePatch;
use crate::organization::types::OrganizationMemberRemovalSnapshot;
use crate::organization::types::OrganizationResponse;
use alibi_core::AuthResult;
use alibi_core::Member;
use alibi_core::wire::UserView;
use async_trait::async_trait;
#[derive(Debug, Clone)]
pub struct OrganizationMemberAdditionDraft {
pub user_id: String,
pub organization_id: String,
pub role: String,
pub team_id: Option<String>,
}
#[derive(Debug, Clone)]
pub struct OrganizationMemberAdditionContext {
pub member: OrganizationMemberAdditionDraft,
pub user: UserView,
pub organization: OrganizationResponse,
}
#[derive(Debug, Clone)]
pub struct OrganizationMemberAddedContext {
pub member: Member,
pub user: UserView,
pub organization: OrganizationResponse,
}
#[async_trait]
pub trait OrganizationMemberAdditionHooks: std::fmt::Debug + Send + Sync {
async fn before_add_member(
&self,
_context: &OrganizationMemberAdditionContext,
) -> AuthResult<Option<OrganizationMemberCreatePatch>> {
Ok(None)
}
async fn after_add_member(&self, _context: &OrganizationMemberAddedContext) -> AuthResult<()> {
Ok(())
}
}
#[derive(Debug, Clone)]
pub struct OrganizationMemberRemovalContext {
pub member: OrganizationMemberRemovalSnapshot,
pub user: UserView,
pub organization: OrganizationResponse,
}
#[async_trait]
pub trait OrganizationMemberRemovalHooks: std::fmt::Debug + Send + Sync {
async fn before_remove(&self, _context: &OrganizationMemberRemovalContext) -> AuthResult<()> {
Ok(())
}
async fn after_remove(&self, _context: &OrganizationMemberRemovalContext) -> AuthResult<()> {
Ok(())
}
}
#[derive(Debug, Clone)]
pub struct OrganizationMemberRoleContext {
pub member: Member,
pub new_role: String,
pub user: UserView,
pub organization: OrganizationResponse,
}
#[derive(Debug, Clone)]
pub struct OrganizationMemberRoleUpdatedContext {
pub member: Member,
pub previous_role: String,
pub user: UserView,
pub organization: OrganizationResponse,
}
#[derive(Debug, Clone, Default)]
pub struct OrganizationMemberRolePatch {
pub role: Option<String>,
}
#[async_trait]
pub trait OrganizationMemberRoleHooks: std::fmt::Debug + Send + Sync {
async fn before_update(
&self,
_context: &OrganizationMemberRoleContext,
) -> AuthResult<Option<OrganizationMemberRolePatch>> {
Ok(None)
}
async fn after_update(
&self,
_context: &OrganizationMemberRoleUpdatedContext,
) -> AuthResult<()> {
Ok(())
}
}