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
« 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."""
3from dataclasses import dataclass
5from kwai_core.domain.presenter import Presenter
6from kwai_core.domain.value_objects.unique_id import UniqueId
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
13@dataclass(kw_only=True, slots=True, frozen=True)
14class DeleteMemberFromTeamCommand:
15 """Input for the use case."""
17 team_id: int
18 member_uuid: str
21class DeleteMemberFromTeam:
22 """Use case: delete member from a team."""
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
35 async def execute(self, command: DeleteMemberFromTeamCommand) -> None:
36 """Execute the use case.
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)
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)
49 member = await self._member_repo.get(
50 self._member_repo.create_query().filter_by_uuid(member_uuid)
51 )
53 team = team.remove_member(member_uuid)
54 await self._team_repo.delete_team_member(team, member.id)
56 self._presenter.present(team)