refactor: improve panel sync performance

This commit is contained in:
3252a8
2026-05-20 23:18:03 +03:00
parent a7f298743d
commit 5001185bf8
11 changed files with 230 additions and 28 deletions
+4
View File
@@ -404,6 +404,10 @@ async def merge_users(
target.lifetime_used_traffic_bytes = (
target.lifetime_used_traffic_bytes or 0
) + source.lifetime_used_traffic_bytes
source_synced_at = getattr(source, "lifetime_used_traffic_synced_at", None)
target_synced_at = getattr(target, "lifetime_used_traffic_synced_at", None)
if source_synced_at and (not target_synced_at or source_synced_at > target_synced_at):
target.lifetime_used_traffic_synced_at = source_synced_at
if not target.referred_by_id and source.referred_by_id != target_user_id:
target.referred_by_id = source.referred_by_id
if target.referred_by_id == source_user_id:
+14
View File
@@ -873,6 +873,15 @@ def _migration_0025_add_support_notification_timestamps(connection: Connection)
)
def _migration_0026_add_lifetime_traffic_synced_at(connection: Connection) -> None:
inspector = inspect(connection)
columns: Set[str] = {col["name"] for col in inspector.get_columns("users")}
if "lifetime_used_traffic_synced_at" not in columns:
connection.execute(
text("ALTER TABLE users ADD COLUMN lifetime_used_traffic_synced_at TIMESTAMPTZ")
)
MIGRATIONS: List[Migration] = [
Migration(
id="0001_add_channel_subscription_fields",
@@ -1010,6 +1019,11 @@ MIGRATIONS: List[Migration] = [
description="Track support ticket admin notification cooldown timestamps",
upgrade=_migration_0025_add_support_notification_timestamps,
),
Migration(
id="0026_add_lifetime_traffic_synced_at",
description="Track when lifetime traffic usage was last synced from panel",
upgrade=_migration_0026_add_lifetime_traffic_synced_at,
),
]
+1
View File
@@ -42,6 +42,7 @@ class User(Base):
referral_code = Column(String(16), nullable=True, unique=True, index=True)
referred_by_id = Column(BigInteger, ForeignKey("users.user_id"), nullable=True)
lifetime_used_traffic_bytes = Column(BigInteger, nullable=True)
lifetime_used_traffic_synced_at = Column(DateTime(timezone=True), nullable=True)
channel_subscription_verified = Column(Boolean, nullable=True)
channel_subscription_checked_at = Column(DateTime(timezone=True), nullable=True)
channel_subscription_verified_for = Column(BigInteger, nullable=True)