Coverage for bc/kwai-bc-identity/src/kwai_bc_identity/update_user_invitation.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module that defines the use case 'update a user invitation'.""" 

2 

3from dataclasses import dataclass, replace 

4 

5from kwai_core.domain.presenter import Presenter 

6from kwai_core.domain.value_objects.unique_id import UniqueId 

7 

8from kwai_bc_identity.user_invitations.user_invitation import UserInvitationEntity 

9from kwai_bc_identity.user_invitations.user_invitation_repository import ( 

10 UserInvitationRepository, 

11) 

12 

13 

14@dataclass(kw_only=True, frozen=True, slots=True) 

15class UpdateUserInvitationCommand: 

16 """Class that defines the input for the use case 'update a user invitation'.""" 

17 

18 uuid: str 

19 revoked: bool = False 

20 remark: str = "" 

21 

22 

23class UpdateUserInvitation: 

24 """Use case 'update a user invitation'.""" 

25 

26 def __init__( 

27 self, 

28 user_invitation_repo: UserInvitationRepository, 

29 presenter: Presenter[UserInvitationEntity], 

30 ) -> None: 

31 """Initialize the class.""" 

32 self._user_invitation_repo = user_invitation_repo 

33 self._presenter = presenter 

34 

35 async def execute(self, command: UpdateUserInvitationCommand) -> None: 

36 """Execute the use case.""" 

37 user_invitation = await self._user_invitation_repo.get_invitation_by_uuid( 

38 UniqueId.create_from_string(command.uuid) 

39 ) 

40 

41 if command.revoked: 

42 user_invitation = user_invitation.revoke() 

43 

44 user_invitation = replace(user_invitation, remark=command.remark) 

45 

46 await self._user_invitation_repo.update(user_invitation) 

47 

48 self._presenter.present(user_invitation)