Coverage for bc/kwai-bc-training/src/kwai_bc_training/delete_coach_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 coach from a training.""" 

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_training.trainings.training import TrainingEntity, TrainingIdentifier 

9from kwai_bc_training.trainings.training_repository import TrainingRepository 

10 

11 

12@dataclass 

13class DeleteCoachFromTrainingCommand: 

14 """Input for the use case.""" 

15 

16 training_id: int 

17 coach_uuid: str 

18 

19 

20class DeleteCoachFromTraining: 

21 """Use case for deleting a coach from a training.""" 

22 

23 def __init__( 

24 self, 

25 training_repo: TrainingRepository, 

26 presenter: Presenter[TrainingEntity], 

27 ): 

28 """Initialize the use case. 

29 

30 Attributes: 

31 training_repo (TrainingRepository): the training repository 

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

33 """ 

34 self._training_repo = training_repo 

35 self._presenter = presenter 

36 

37 async def execute(self, command: DeleteCoachFromTrainingCommand): 

38 """Execute the use case. 

39 

40 Args: 

41 command: the input for this use case. 

42 

43 Raises: 

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

45 """ 

46 training = await self._training_repo.get_by_id( 

47 TrainingIdentifier(command.training_id) 

48 ) 

49 coach_uuid = UniqueId.create_from_string(command.coach_uuid) 

50 training_coaches = list( 

51 filter( 

52 lambda training_coach: training_coach.coach.uuid == coach_uuid, 

53 training.coaches, 

54 ) 

55 ) 

56 if len(training_coaches) > 0: 

57 training = training.delete_coach(training_coaches[0]) 

58 await self._training_repo.update(training) 

59 

60 self._presenter.present(training)