Coverage for src/kwai/modules/portal/get_authors.py: 100%

15 statements  

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

1"""Module that implements the 'get authors' use case.""" 

2 

3from dataclasses import dataclass 

4 

5from kwai.core.domain.presenter import AsyncPresenter, IterableResult 

6from kwai.modules.portal.domain.author import AuthorEntity 

7from kwai.modules.portal.repositories.author_repository import AuthorRepository 

8 

9 

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

11class GetAuthorsCommand: 

12 """Input for the use case.""" 

13 

14 limit: int = 0 

15 offset: int = 0 

16 

17 

18class GetAuthors: 

19 """Use case for getting authors.""" 

20 

21 def __init__( 

22 self, 

23 author_repo: AuthorRepository, 

24 presenter: AsyncPresenter[IterableResult[AuthorEntity]], 

25 ): 

26 """Initialize the use case. 

27 

28 Args: 

29 author_repo: The repository for getting the authors. 

30 presenter: The presenter for authors. 

31 """ 

32 self._author_repo = author_repo 

33 self._presenter = presenter 

34 

35 async def execute(self, command: GetAuthorsCommand): 

36 """Execute the use case. 

37 

38 Args: 

39 command: Input for the use case. 

40 """ 

41 query = self._author_repo.create_query() 

42 

43 await self._presenter.present( 

44 IterableResult( 

45 count=await query.count(), 

46 limit=command.limit, 

47 offset=command.offset, 

48 iterator=self._author_repo.get_all( 

49 query, limit=command.limit, offset=command.offset 

50 ), 

51 ) 

52 )