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 = ""