Coverage for apps/kwai-api/src/kwai_api/v1/teams/schemas.py: 100%
26 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 the schemas for the teams API."""
3from typing import Annotated
5from kwai_core.json_api import (
6 Meta,
7 Relationship,
8 RelationshipList,
9 ResourceMeta,
10)
11from pydantic import BaseModel, Field
13from kwai_api.schemas.resources import TeamResourceIdentifier
14from kwai_api.v1.schemas import (
15 CountryResource,
16 CountryResourceIdentifier,
17)
18from kwai_api.v1.teams.resources import TeamMemberResourceIdentifier
21class TeamMemberAttributes(BaseModel):
22 """Attributes for a team member."""
24 active: bool
25 first_name: str
26 last_name: str
27 license_number: str
28 license_end_date: str
29 gender: int
30 birthdate: str
31 active_in_club: bool
34class TeamMemberRelationships(BaseModel):
35 """Relationships for a team member JSON:API resource."""
37 nationality: Relationship[CountryResourceIdentifier]
38 team: Relationship[TeamResourceIdentifier]
41class TeamMemberResource(TeamMemberResourceIdentifier):
42 """A JSON:API resource for a team member."""
44 meta: ResourceMeta | None = None
45 attributes: TeamMemberAttributes
46 relationships: TeamMemberRelationships
49TeamMemberInclude = Annotated[CountryResource, Field(discriminator="type")]
52class TeamMemberDocument(BaseModel):
53 """A JSON:API document for one team member."""
55 data: TeamMemberResource
56 included: set[TeamMemberInclude] = Field(default_factory=set)
59class TeamMembersDocument(BaseModel):
60 """A JSON:API document for multiple team members."""
62 meta: Meta
63 data: list[TeamMemberResource] = Field(default_factory=list)
64 included: set[TeamMemberInclude] = Field(default_factory=set)
67class TeamAttributes(BaseModel):
68 """Attributes for the team JSON:API resource."""
70 name: str
71 active: bool
72 remark: str
75class TeamRelationships(BaseModel):
76 """Relationships for a team JSON:API resource."""
78 team_members: RelationshipList[TeamMemberResourceIdentifier]
81class TeamResource(TeamResourceIdentifier):
82 """A JSON:API resource for a team."""
84 meta: ResourceMeta | None = None
85 attributes: TeamAttributes
86 relationships: TeamRelationships
89TeamInclude = Annotated[
90 TeamMemberResource | CountryResource, Field(discriminator="type")
91]
94class TeamDocument(BaseModel):
95 """A JSON:API document for one team."""
97 data: TeamResource
98 included: set[TeamInclude] = Field(default_factory=set)
101class TeamsDocument(BaseModel):
102 """A JSON:API document for multiple teams."""
104 meta: Meta
105 data: list[TeamResource] = Field(default_factory=list)
106 included: set[TeamInclude] = Field(default_factory=set)