Coverage for bc/kwai-bc-training/src/kwai_bc_training/delete_team_from_training.py: 100%

19 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 deleting a team from a training.""" 

2 

3from dataclasses import dataclass 

4 

5from kwai_core.domain.presenter import Presenter 

6 

7from kwai_bc_training.teams.team import TeamIdentifier 

8from kwai_bc_training.teams.team_repository import TeamRepository 

9from kwai_bc_training.trainings.training import TrainingEntity, TrainingIdentifier 

10from kwai_bc_training.trainings.training_repository import TrainingRepository 

11 

12 

13@dataclass 

14class DeleteTeamFromTrainingCommand: 

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

16 

17 training_id: int 

18 team_id: int 

19 

20 

21class DeleteTeamFromTraining: 

22 """Use case for deleting a team from a training.""" 

23 

24 def __init__( 

25 self, 

26 training_repo: TrainingRepository, 

27 team_repo: TeamRepository, 

28 presenter: Presenter[TrainingEntity], 

29 ): 

30 """Initialize the use case. 

31 

32 Attributes: 

33 training_repo (TrainingRepository): the training repository 

34 team_repo (TeamRepository): the team repository 

35 presenter (Presenter[TrainingEntity]): A presenter for a training 

36 """ 

37 self._training_repo = training_repo 

38 self._team_repo = team_repo 

39 self._presenter = presenter 

40 

41 async def execute(self, command: DeleteTeamFromTrainingCommand): 

42 """Execute the use case. 

43 

44 Args: 

45 command: the input for this use case. 

46 

47 Raises: 

48 TrainingNotFoundException: Raised when the training with the given id does not exist. 

49 TeamNotFoundException: Raised when the team with the given id does not exist. 

50 """ 

51 training = await self._training_repo.get_by_id( 

52 TrainingIdentifier(command.training_id) 

53 ) 

54 team = await self._team_repo.get_by_id(TeamIdentifier(command.team_id)) 

55 

56 training = training.delete_team(team) 

57 await self._training_repo.update(training) 

58 

59 self._presenter.present(training)