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
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for the use case "Get Pages"."""
3from dataclasses import dataclass
5from kwai_core.domain.presenter import AsyncPresenter, IterableResult
7from kwai_bc_portal.domain.page import PageEntity
8from kwai_bc_portal.pages.page_repository import PageRepository
11@dataclass(kw_only=True, frozen=True, slots=True)
12class GetPagesCommand:
13 """Input for the "Get Pages" use case."""
15 offset: int | None = None
16 limit: int | None = None
17 application: int | str | None = None
18 enabled: bool = True
21class GetPages:
22 """Use case "Get Pages"."""
24 def __init__(
25 self,
26 repo: PageRepository,
27 presenter: AsyncPresenter[IterableResult[PageEntity]],
28 ):
29 """Initialize the use case.
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
38 async def execute(self, command: GetPagesCommand):
39 """Executes the use case."""
40 query = self._repo.create_query()
42 if command.enabled:
43 query.filter_by_active()
45 if command.application is not None:
46 query.filter_by_application(command.application)
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 )