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

1"""Module that defines an interface for a team repository.""" 

2 

3from abc import ABC, abstractmethod 

4from typing import AsyncGenerator, Self 

5 

6from kwai_core.domain.repository.query import Query 

7 

8from kwai_bc_teams.domain.team import TeamEntity, TeamIdentifier 

9from kwai_bc_teams.domain.team_member import TeamMember 

10 

11 

12class TeamNotFoundException(Exception): 

13 """Raised when a team cannot be found.""" 

14 

15 

16class TeamQuery(Query, ABC): 

17 """An interface for a team query.""" 

18 

19 @abstractmethod 

20 def filter_by_id(self, id_: TeamIdentifier) -> Self: 

21 """Find a team by its id.""" 

22 raise NotImplementedError 

23 

24 

25class TeamRepository(ABC): 

26 """An interface for a team repository.""" 

27 

28 @abstractmethod 

29 def create_query(self) -> TeamQuery: 

30 """Create a team query.""" 

31 raise NotImplementedError 

32 

33 @abstractmethod 

34 async def get(self, query: TeamQuery | None = None) -> TeamEntity: 

35 """Return the first returned element of the given query. 

36 

37 Args: 

38 query: The query to use for getting the first team. 

39 

40 Raises: 

41 TeamNotFoundException: If the team cannot be found. 

42 """ 

43 raise NotImplementedError 

44 

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. 

53 

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. 

58 

59 Yields: 

60 A team entity. 

61 

62 """ 

63 raise NotImplementedError 

64 

65 @abstractmethod 

66 async def create(self, team: TeamEntity) -> TeamEntity: 

67 """Save a new team.""" 

68 

69 @abstractmethod 

70 async def delete(self, team: TeamEntity) -> None: 

71 """Delete a team.""" 

72 

73 @abstractmethod 

74 async def update(self, team: TeamEntity) -> None: 

75 """Update a team.""" 

76 

77 @abstractmethod 

78 async def add_team_member(self, team: TeamEntity, member: TeamMember): 

79 """Add a member to a team."""