Coverage for bc/kwai-bc-teams/src/kwai_bc_teams/delete_member_from_team.py: 100%

21 statements  

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

1"""Module that defines the use case for "Delete a member from a team.""" 

2 

3from dataclasses import dataclass 

4 

5from kwai_core.domain.presenter import Presenter 

6from kwai_core.domain.value_objects.unique_id import UniqueId 

7 

8from kwai_bc_teams.domain.team import TeamEntity, TeamIdentifier 

9from kwai_bc_teams.repositories.member_repository import MemberRepository 

10from kwai_bc_teams.repositories.team_repository import TeamRepository 

11 

12 

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

14class DeleteMemberFromTeamCommand: 

15 """Input for the use case.""" 

16 

17 team_id: int 

18 member_uuid: str 

19 

20 

21class DeleteMemberFromTeam: 

22 """Use case: delete member from a team.""" 

23 

24 def __init__( 

25 self, 

26 team_repo: TeamRepository, 

27 member_repo: MemberRepository, 

28 presenter: Presenter[TeamEntity], 

29 ): 

30 """Initialize the use case.""" 

31 self._team_repo = team_repo 

32 self._member_repo = member_repo 

33 self._presenter = presenter 

34 

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

36 """Execute the use case. 

37 

38 Raises: 

39 TeamNotFoundException: When the team does not exist. 

40 MemberNotFoundException: When the member does not exist. 

41 """ 

42 member_uuid = UniqueId.create_from_string(command.member_uuid) 

43 

44 team_query = self._team_repo.create_query().filter_by_id( 

45 TeamIdentifier(command.team_id) 

46 ) 

47 team = await self._team_repo.get(team_query) 

48 

49 member = await self._member_repo.get( 

50 self._member_repo.create_query().filter_by_uuid(member_uuid) 

51 ) 

52 

53 team = team.remove_member(member_uuid) 

54 await self._team_repo.delete_team_member(team, member.id) 

55 

56 self._presenter.present(team)