Coverage for bc/kwai-bc-portal/src/kwai_bc_portal/get_pages.py: 95%

21 statements  

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

1"""Module for the use case "Get Pages".""" 

2 

3from dataclasses import dataclass 

4 

5from kwai_core.domain.presenter import AsyncPresenter, IterableResult 

6 

7from kwai_bc_portal.domain.page import PageEntity 

8from kwai_bc_portal.pages.page_repository import PageRepository 

9 

10 

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

12class GetPagesCommand: 

13 """Input for the "Get Pages" use case.""" 

14 

15 offset: int | None = None 

16 limit: int | None = None 

17 application: int | str | None = None 

18 enabled: bool = True 

19 

20 

21class GetPages: 

22 """Use case "Get Pages".""" 

23 

24 def __init__( 

25 self, 

26 repo: PageRepository, 

27 presenter: AsyncPresenter[IterableResult[PageEntity]], 

28 ): 

29 """Initialize the use case. 

30 

31 Args: 

32 repo: A repository to get pages. 

33 presenter: A presenter for a page entity. 

34 """ 

35 self._repo = repo 

36 self._presenter = presenter 

37 

38 async def execute(self, command: GetPagesCommand): 

39 """Executes the use case.""" 

40 query = self._repo.create_query() 

41 

42 if command.enabled: 

43 query.filter_by_active() 

44 

45 if command.application is not None: 

46 query.filter_by_application(command.application) 

47 

48 await self._presenter.present( 

49 IterableResult( 

50 count=await query.count(), 

51 offset=command.offset or 0, 

52 limit=command.limit or 0, 

53 iterator=self._repo.get_all( 

54 query, limit=command.limit, offset=command.offset 

55 ), 

56 ) 

57 )