Coverage for src/kwai/api/v1/auth/schemas/user_account.py: 100%
19 statements
« prev ^ index » next coverage.py v7.6.10, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2024-01-01 00:00 +0000
1"""Schemas for a user account resource."""
3from typing import Self
5from pydantic import BaseModel
7from kwai.api.v1.auth.schemas.resources import UserAccountResourceIdentifier
8from kwai.core.json_api import Document, ResourceData
9from kwai.modules.identity.users.user_account import UserAccountEntity
12class UserAccountAttributes(BaseModel):
13 """Attributes of a user account JSON:API resource."""
15 email: str
16 last_login: str | None
17 last_unsuccessful_login: str | None
18 revoked: bool
19 admin: bool
20 first_name: str
21 last_name: str
22 remark: str
25class UserAccountResource(
26 UserAccountResourceIdentifier, ResourceData[UserAccountAttributes, None]
27):
28 """A JSON:API resource for a user account."""
31class UserAccountDocument(Document[UserAccountResource, None]):
32 """A JSON:API document for a user account."""
34 @classmethod
35 def create(cls, user_account: UserAccountEntity) -> Self:
36 """Create a document for a user account."""
37 return cls(
38 data=UserAccountResource(
39 id=str(user_account.user.uuid),
40 attributes=UserAccountAttributes(
41 email=str(user_account.user.email),
42 last_login=None
43 if user_account.last_login.empty
44 else str(user_account.last_login),
45 last_unsuccessful_login=None
46 if user_account.last_unsuccessful_login.empty
47 else str(user_account.last_unsuccessful_login),
48 revoked=user_account.revoked,
49 admin=user_account.admin,
50 first_name=user_account.user.name.first_name,
51 last_name=user_account.user.name.last_name,
52 remark=user_account.user.remark,
53 ),
54 )
55 )