Sigra.Organizations.Callbacks behaviour (Sigra v0.2.3)

Copy Markdown View Source

Behaviour for organization lifecycle hook callbacks.

Implement these callbacks in your generated organizations wrapper module to customize behavior. All callbacks have no-op default implementations via defoverridable when using use Sigra.Organizations.

Callbacks

CallbackCan modify?Use case
before_create_organization/2ChangesetAdd validation, set fields
after_create_organization/2Read-onlyCreate related records
before_delete_organization/2Can abortCheck billing state
after_delete_organization/2Read-onlyCancel subscriptions
before_add_member/4Can abortCheck seat limits
after_add_member/3Read-onlyUpdate seat counts
before_role_change/3Can abortBilling role checks
after_member_remove/2Read-onlyRevoke external access

Returning {:error, reason} from any before_* callback aborts the enclosing Ecto.Multi transaction.

Summary

Callbacks

after_add_member(membership, org, scope)

@callback after_add_member(membership :: struct(), org :: struct(), scope :: map()) ::
  :ok | {:error, term()}

after_create_organization(org, scope)

@callback after_create_organization(org :: struct(), scope :: map()) ::
  :ok | {:error, term()}

after_delete_organization(org, scope)

@callback after_delete_organization(org :: struct(), scope :: map()) ::
  :ok | {:error, term()}

after_member_remove(membership, scope)

@callback after_member_remove(membership :: struct(), scope :: map()) ::
  :ok | {:error, term()}

before_add_member(org, user, role, scope)

@callback before_add_member(
  org :: struct(),
  user :: struct(),
  role :: atom(),
  scope :: map()
) ::
  :ok | {:error, term()}

before_create_organization(t, scope)

@callback before_create_organization(Ecto.Changeset.t(), scope :: map()) ::
  {:ok, Ecto.Changeset.t()} | {:error, term()}

before_delete_organization(org, scope)

@callback before_delete_organization(org :: struct(), scope :: map()) ::
  :ok | {:error, term()}

before_role_change(membership, new_role, scope)

@callback before_role_change(membership :: struct(), new_role :: atom(), scope :: map()) ::
  :ok | {:error, term()}