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
« 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."""
3from dataclasses import dataclass
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
10@dataclass(kw_only=True, slots=True, frozen=True)
11class GetAuthorsCommand:
12 """Input for the use case."""
14 limit: int = 0
15 offset: int = 0
18class GetAuthors:
19 """Use case for getting authors."""
21 def __init__(
22 self,
23 author_repo: AuthorRepository,
24 presenter: AsyncPresenter[IterableResult[AuthorEntity]],
25 ):
26 """Initialize the use case.
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
35 async def execute(self, command: GetAuthorsCommand):
36 """Execute the use case.
38 Args:
39 command: Input for the use case.
40 """
41 query = self._author_repo.create_query()
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 )