Files
onion-arch/app/domain/users/entities.py
2026-01-30 16:34:56 +03:00

39 lines
1.1 KiB
Python

from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime, timezone
from uuid import UUID
from app.domain.shared.base_entity import Entity
from app.domain.users.events import UserRegistered
from app.domain.users.value_objects import Email
@dataclass(eq=False)
class User(Entity[UUID]):
email: Email
full_name: str
is_active: bool = True
created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
_events: list[object] = field(default_factory=list, init=False, repr=False)
@property
def events(self) -> list[object]:
return list(self._events)
def pull_events(self) -> list[object]:
ev, self._events = self._events, []
return ev
@classmethod
def register(cls, *, user_id: UUID, email: Email, full_name: str) -> "User":
user = cls(id=user_id, email=email, full_name=full_name)
user._events.append(
UserRegistered(
user_id=user_id,
email=str(email),
occurred_at=datetime.now(timezone.utc),
)
)
return user