Coverage for bc/kwai-bc-club/src/kwai_bc_club/domain/contact.py: 100%
17 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module that defines the contact entity."""
3from dataclasses import dataclass, field, replace
4from typing import Self
6from kwai_core.domain.entity import DataclassEntity
7from kwai_core.domain.value_objects.email_address import EmailAddress
8from kwai_core.domain.value_objects.identifier import IntIdentifier
10from kwai_bc_club.domain.value_objects import Address
13class ContactIdentifier(IntIdentifier):
14 """Identifier for a contact."""
17@dataclass(kw_only=True, eq=False, slots=True, frozen=True)
18class ContactEntity(DataclassEntity):
19 """A contact entity."""
21 emails: tuple[EmailAddress, ...] = field(default_factory=tuple)
22 tel: str = ""
23 mobile: str = ""
24 address: Address
25 remark: str = ""
27 def add_email(self, email: EmailAddress) -> Self:
28 """Add an email to the contact."""
29 return replace(self, emails=self.emails + (email,))
31 def remove_email(self, email: EmailAddress) -> Self:
32 """Remove the email from the contact."""
33 return replace(self, emails=tuple(filter(lambda e: e != email, self.emails)))