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
« 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."""
3from dataclasses import dataclass
5from kwai_core.domain.presenter import Presenter
6from kwai_core.domain.value_objects.unique_id import UniqueId
8from kwai_bc_training.trainings.training import TrainingEntity, TrainingIdentifier
9from kwai_bc_training.trainings.training_repository import TrainingRepository
12@dataclass
13class DeleteCoachFromTrainingCommand:
14 """Input for the use case."""
16 training_id: int
17 coach_uuid: str
20class DeleteCoachFromTraining:
21 """Use case for deleting a coach from a training."""
23 def __init__(
24 self,
25 training_repo: TrainingRepository,
26 presenter: Presenter[TrainingEntity],
27 ):
28 """Initialize the use case.
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
37 async def execute(self, command: DeleteCoachFromTrainingCommand):
38 """Execute the use case.
40 Args:
41 command: the input for this use case.
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)
60 self._presenter.present(training)