Coverage for bc/kwai-bc-identity/src/kwai_bc_identity/users/user_tables.py: 96%
28 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"""Modules that defines all table classes for a user."""
3from dataclasses import dataclass
4from datetime import datetime
5from typing import Self
7from kwai_core.db.table_row import TableRow
8from kwai_core.domain.value_objects.email_address import EmailAddress
9from kwai_core.domain.value_objects.name import Name
10from kwai_core.domain.value_objects.password import Password
11from kwai_core.domain.value_objects.timestamp import Timestamp
12from kwai_core.domain.value_objects.traceable_time import TraceableTime
13from kwai_core.domain.value_objects.unique_id import UniqueId
15from kwai_bc_identity.users.user import UserEntity, UserIdentifier
16from kwai_bc_identity.users.user_account import (
17 UserAccountEntity,
18 UserAccountIdentifier,
19)
22@dataclass(kw_only=True, frozen=True, slots=True)
23class UserRow(TableRow):
24 """Represent a row in the users table."""
26 __table_name__ = "users"
28 id: int | None
29 email: str
30 first_name: str
31 last_name: str
32 remark: str | None
33 uuid: str
34 created_at: datetime
35 updated_at: datetime | None
36 person_id: int | None
38 def create_entity(self) -> UserEntity:
39 """Create a user entity from a table row."""
40 return UserEntity(
41 id=UserIdentifier(self.id),
42 uuid=UniqueId.create_from_string(self.uuid),
43 name=Name(
44 first_name=self.first_name,
45 last_name=self.last_name,
46 ),
47 remark=self.remark or "",
48 email=EmailAddress(self.email),
49 traceable_time=TraceableTime(
50 created_at=Timestamp.create_utc(timestamp=self.created_at),
51 updated_at=Timestamp.create_utc(timestamp=self.updated_at),
52 ),
53 )
55 @classmethod
56 def persist(cls, user: UserEntity) -> Self:
57 """Transform a user entity into a table record."""
58 return cls(
59 id=user.id.value,
60 email=str(user.email),
61 first_name=user.name.first_name,
62 last_name=user.name.last_name,
63 remark=user.remark,
64 uuid=str(user.uuid),
65 created_at=user.traceable_time.created_at.timestamp,
66 updated_at=user.traceable_time.updated_at.timestamp,
67 person_id=None,
68 )
71@dataclass(kw_only=True, frozen=True, slots=True)
72class UserAccountRow(TableRow):
73 """Represent a row in the user table with user account information."""
75 __table_name__ = "users"
77 id: int | None
78 email: str
79 first_name: str
80 last_name: str
81 remark: str | None
82 uuid: str
83 created_at: datetime
84 updated_at: datetime | None
85 person_id: int | None
86 last_login: datetime | None
87 last_unsuccessful_login: datetime | None
88 password: str
89 revoked: int
90 admin: int
92 def create_entity(self) -> UserAccountEntity:
93 """Create a user account entity from the table row."""
94 return UserAccountEntity(
95 id=UserAccountIdentifier(self.id),
96 password=Password(self.password.encode()),
97 last_login=Timestamp(self.last_login),
98 last_unsuccessful_login=Timestamp(self.last_unsuccessful_login),
99 revoked=self.revoked == 1,
100 admin=self.admin == 1,
101 user=UserEntity(
102 id=UserIdentifier(self.id),
103 uuid=UniqueId.create_from_string(self.uuid),
104 name=Name(
105 first_name=self.first_name,
106 last_name=self.last_name,
107 ),
108 email=EmailAddress(self.email),
109 traceable_time=TraceableTime(
110 created_at=Timestamp.create_utc(self.created_at),
111 updated_at=Timestamp.create_utc(self.updated_at),
112 ),
113 remark=self.remark or "",
114 ),
115 )
117 @classmethod
118 def persist(cls, user_account: UserAccountEntity) -> Self:
119 """Transform a user account entity into a table record."""
120 return UserAccountRow(
121 id=user_account.id.value,
122 email=str(user_account.user.email),
123 first_name=user_account.user.name.first_name,
124 last_name=user_account.user.name.last_name,
125 remark=user_account.user.remark,
126 uuid=str(user_account.user.uuid),
127 created_at=user_account.user.traceable_time.created_at.timestamp,
128 updated_at=user_account.user.traceable_time.updated_at.timestamp,
129 person_id=None,
130 last_login=user_account.last_login.timestamp,
131 last_unsuccessful_login=user_account.last_unsuccessful_login.timestamp,
132 password=str(user_account.password),
133 revoked=1 if user_account.revoked else 0,
134 admin=1 if user_account.admin else 0,
135 )