fix(backend): profile history gets a row only when a field really changed, partial snapshots keep the known phone and username

This commit is contained in:
hh committed 2026-10-19 02:57:49 +00:00
1 parent aa41bbbc74
commit 0c9c848fb1
2 files changed
+53 -22

No files matched your search

@@ -1,4 +1,4 @@
from dataclasses import dataclass
from dataclasses import dataclass, field
from pyrogram import Client, raw
from pyrogram.types import Chat, User
@@ -12,6 +12,11 @@ class ProfileFields:
phone: str | None = None
photo_unique_id: str | None = None
is_deleted_account: bool = False
unknown: frozenset[str] = field(default=frozenset(), compare=False)
MIN_UNKNOWN = frozenset({"username", "phone"})
CHAT_UNKNOWN = frozenset({"phone", "is_deleted_account"})
def active_username(usernames: list[raw.types.Username]) -> str | None:
@@ -35,6 +40,7 @@ async def snapshot_from_user(
phone=user.phone_number if user else None,
photo_unique_id=photo_unique_id,
is_deleted_account=bool(getattr(raw_user, "deleted", False)),
unknown=MIN_UNKNOWN if getattr(raw_user, "min", False) else frozenset(),
)
return fields, photo_file_id, photo_unique_id
@@ -52,6 +58,7 @@ def snapshot_from_high_level(
phone=user.phone_number,
photo_unique_id=photo_unique_id,
is_deleted_account=bool(user.is_deleted),
unknown=MIN_UNKNOWN if user.is_min else frozenset(),
)
return fields, photo_file_id, photo_unique_id
@@ -64,8 +71,7 @@ def snapshot_from_chat(chat: Chat) -> tuple[ProfileFields, str | None, str | Non
first_name=chat.first_name,
last_name=chat.last_name,
username=chat.username,
phone=None,
photo_unique_id=photo_unique_id,
is_deleted_account=False,
unknown=CHAT_UNKNOWN,
)
return fields, photo_file_id, photo_unique_id