Source code for src.module.tenant.domain.events

"""Tenant Context domain events."""

from __future__ import annotations

from dataclasses import dataclass
from typing import ClassVar

from src.share_kernel.domain.events import DomainEvent, register_event


[docs] @register_event @dataclass(frozen=True) class TenantCreated(DomainEvent): """Emitted when a new tenant is created and its storage is provisioned.""" event_type: ClassVar[str] = "tenant.created" tenant_slug: str = "" schema_name: str = ""
[docs] @register_event @dataclass(frozen=True) class TenantSuspended(DomainEvent): """Emitted when a tenant is suspended.""" event_type: ClassVar[str] = "tenant.suspended" tenant_slug: str = ""
[docs] @register_event @dataclass(frozen=True) class TenantActivated(DomainEvent): """Emitted when a tenant is (re)activated.""" event_type: ClassVar[str] = "tenant.activated" tenant_slug: str = ""
[docs] @register_event @dataclass(frozen=True) class TenantArchived(DomainEvent): """Emitted when a tenant is archived (soft-deleted).""" event_type: ClassVar[str] = "tenant.archived" tenant_slug: str = ""
[docs] @register_event @dataclass(frozen=True) class MemberAdded(DomainEvent): """Emitted when a user is added to a tenant.""" event_type: ClassVar[str] = "tenant.member_added" user_id: str = "" roles: list[str] | None = None
[docs] @register_event @dataclass(frozen=True) class MemberRemoved(DomainEvent): """Emitted when a user is removed from a tenant.""" event_type: ClassVar[str] = "tenant.member_removed" user_id: str = ""
[docs] @register_event @dataclass(frozen=True) class MemberRolesUpdated(DomainEvent): """Emitted when a member's roles or ABAC attributes are updated.""" event_type: ClassVar[str] = "tenant.member_roles_updated" user_id: str = "" membership_id: str = "" old_roles: list[str] | None = None new_roles: list[str] | None = None
[docs] @register_event @dataclass(frozen=True) class InvitationSent(DomainEvent): """Emitted when an invitation to join a tenant is sent.""" event_type: ClassVar[str] = "tenant.invitation_sent" email: str = "" invited_by_id: str = ""
[docs] @register_event @dataclass(frozen=True) class InvitationAccepted(DomainEvent): """Emitted when an invitation is accepted.""" event_type: ClassVar[str] = "tenant.invitation_accepted" email: str = "" user_id: str = ""