init
This commit is contained in:
38
app/domain/users/entities.py
Normal file
38
app/domain/users/entities.py
Normal file
@@ -0,0 +1,38 @@
|
||||
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
|
||||
Reference in New Issue
Block a user