Coverage for bc/kwai-bc-teams/src/kwai_bc_teams/get_members.py: 100%
20 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 defining the use case 'Get Members'."""
3from dataclasses import dataclass
5from kwai_core.domain.presenter import AsyncPresenter, IterableResult
7from kwai_bc_teams.domain.team import TeamIdentifier
8from kwai_bc_teams.domain.team_member import MemberEntity
9from kwai_bc_teams.repositories.member_repository import MemberRepository
12@dataclass(frozen=True, kw_only=True, slots=True)
13class GetMembersCommand:
14 """Input for the use case 'Get Members'.
16 When in_team is False and a team_id is set, only the members that are not
17 part of that team will be returned.
18 """
20 team_id: int | None = None
21 in_team: bool = True
22 limit: int = 0
23 offset: int = 0
26class GetMembers:
27 """Implements the use case 'Get Members'."""
29 def __init__(
30 self,
31 member_repository: MemberRepository,
32 presenter: AsyncPresenter[IterableResult[MemberEntity]],
33 ):
34 """Initialize the use case."""
35 self._member_repository = member_repository
36 self._presenter = presenter
38 async def execute(self, command: GetMembersCommand):
39 """Execute the use case."""
40 member_query = self._member_repository.create_query()
41 if command.team_id is not None:
42 member_query = member_query.filter_by_team(
43 TeamIdentifier(command.team_id), command.in_team
44 )
45 await self._presenter.present(
46 IterableResult(
47 count=await member_query.count(),
48 limit=command.limit,
49 offset=command.offset,
50 iterator=self._member_repository.get_all(
51 member_query, limit=command.limit, offset=command.offset
52 ),
53 )
54 )