Coverage for bc/kwai-bc-identity/src/kwai_bc_identity/user_recoveries/user_recovery_tables.py: 100%
17 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 table for a user recovery."""
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.timestamp import Timestamp
9from kwai_core.domain.value_objects.traceable_time import TraceableTime
10from kwai_core.domain.value_objects.unique_id import UniqueId
12from kwai_bc_identity.user_recoveries.user_recovery import (
13 UserRecoveryEntity,
14 UserRecoveryIdentifier,
15)
16from kwai_bc_identity.users.user import UserEntity
19@dataclass(kw_only=True, frozen=True, slots=True)
20class UserRecoveryRow(TableRow):
21 """Represent a row in the user recovery table."""
23 __table_name__ = "user_recoveries"
25 id: int | None
26 user_id: int
27 uuid: str
28 expired_at: datetime
29 confirmed_at: datetime | None
30 mailed_at: datetime | None
31 remark: str | None
32 created_at: datetime
33 updated_at: datetime | None
35 def create_entity(self, user: UserEntity) -> UserRecoveryEntity:
36 """Create a user recovery entity from the table row."""
37 return UserRecoveryEntity(
38 id=UserRecoveryIdentifier(self.id),
39 uuid=UniqueId.create_from_string(self.uuid),
40 user=user,
41 expiration=Timestamp.create_utc(self.expired_at),
42 remark=self.remark,
43 confirmation=Timestamp.create_utc(self.confirmed_at),
44 mailed_at=Timestamp.create_utc(self.mailed_at),
45 traceable_time=TraceableTime(
46 created_at=Timestamp.create_utc(timestamp=self.created_at),
47 updated_at=Timestamp.create_utc(timestamp=self.updated_at),
48 ),
49 )
51 @classmethod
52 def persist(cls, user_recovery: UserRecoveryEntity) -> Self:
53 """Map a user recovery entity to a table record."""
54 return UserRecoveryRow(
55 id=user_recovery.id.value,
56 user_id=user_recovery.user.id.value,
57 uuid=str(user_recovery.uuid),
58 expired_at=user_recovery.expiration.timestamp,
59 confirmed_at=user_recovery.confirmation.timestamp,
60 mailed_at=user_recovery.mailed_at.timestamp,
61 remark=user_recovery.remark,
62 created_at=user_recovery.traceable_time.created_at.timestamp,
63 updated_at=user_recovery.traceable_time.updated_at.timestamp,
64 )