Coverage for bc/kwai-bc-teams/src/kwai_bc_teams/repositories/team_repository.py: 100%
8 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 that defines an interface for a team repository."""
3from abc import ABC, abstractmethod
4from typing import AsyncGenerator, Self
6from kwai_core.domain.repository.query import Query
8from kwai_bc_teams.domain.team import TeamEntity, TeamIdentifier
9from kwai_bc_teams.domain.team_member import TeamMember
12class TeamNotFoundException(Exception):
13 """Raised when a team cannot be found."""
16class TeamQuery(Query, ABC):
17 """An interface for a team query."""
19 @abstractmethod
20 def filter_by_id(self, id_: TeamIdentifier) -> Self:
21 """Find a team by its id."""
22 raise NotImplementedError
25class TeamRepository(ABC):
26 """An interface for a team repository."""
28 @abstractmethod
29 def create_query(self) -> TeamQuery:
30 """Create a team query."""
31 raise NotImplementedError
33 @abstractmethod
34 async def get(self, query: TeamQuery | None = None) -> TeamEntity:
35 """Return the first returned element of the given query.
37 Args:
38 query: The query to use for getting the first team.
40 Raises:
41 TeamNotFoundException: If the team cannot be found.
42 """
43 raise NotImplementedError
45 @abstractmethod
46 def get_all(
47 self,
48 query: TeamQuery | None = None,
49 limit: int | None = None,
50 offset: int | None = None,
51 ) -> AsyncGenerator[TeamEntity, None]:
52 """Return all teams of the given query.
54 Args:
55 query: The query to use for getting the teams.
56 limit: The maximum number of teams to return.
57 offset: The offset to use for fetching teams.
59 Yields:
60 A team entity.
62 """
63 raise NotImplementedError
65 @abstractmethod
66 async def create(self, team: TeamEntity) -> TeamEntity:
67 """Save a new team."""
69 @abstractmethod
70 async def delete(self, team: TeamEntity) -> None:
71 """Delete a team."""
73 @abstractmethod
74 async def update(self, team: TeamEntity) -> None:
75 """Update a team."""
77 @abstractmethod
78 async def add_team_member(self, team: TeamEntity, member: TeamMember):
79 """Add a member to a team."""