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

15 statements  

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

1"""Module that implements the use case 'Get Teams'.""" 

2 

3from dataclasses import dataclass 

4 

5from kwai_core.domain.presenter import AsyncPresenter, IterableResult 

6 

7from kwai_bc_teams.domain.team import TeamEntity 

8from kwai_bc_teams.repositories.team_repository import TeamRepository 

9 

10 

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

12class GetTeamsCommand: 

13 """Input for the use case 'Get Teams'.""" 

14 

15 offset: int | None = None 

16 limit: int | None = None 

17 

18 

19class GetTeams: 

20 """Implement the use case 'Get Teams'.""" 

21 

22 def __init__( 

23 self, 

24 team_repo: TeamRepository, 

25 presenter: AsyncPresenter[IterableResult[TeamEntity]], 

26 ): 

27 """Initialize the use case.""" 

28 self._team_repo = team_repo 

29 self._presenter = presenter 

30 

31 async def execute(self, command: GetTeamsCommand) -> None: 

32 """Execute the use case.""" 

33 query = self._team_repo.create_query() 

34 await self._presenter.present( 

35 IterableResult( 

36 count=await query.count(), 

37 limit=command.limit, 

38 offset=command.offset, 

39 iterator=self._team_repo.get_all(query, command.offset, command.limit), 

40 ) 

41 )