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

1"""Module that defines the contact entity.""" 

2 

3from dataclasses import dataclass, field, replace 

4from typing import Self 

5 

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 

9 

10from kwai_bc_club.domain.value_objects import Address 

11 

12 

13class ContactIdentifier(IntIdentifier): 

14 """Identifier for a contact.""" 

15 

16 

17@dataclass(kw_only=True, eq=False, slots=True, frozen=True) 

18class ContactEntity(DataclassEntity): 

19 """A contact entity.""" 

20 

21 emails: tuple[EmailAddress, ...] = field(default_factory=tuple) 

22 tel: str = "" 

23 mobile: str = "" 

24 address: Address 

25 remark: str = "" 

26 

27 def add_email(self, email: EmailAddress) -> Self: 

28 """Add an email to the contact.""" 

29 return replace(self, emails=self.emails + (email,)) 

30 

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)))