Files
remnawave-minishop/db/dal/panel_sync_dal.py
T

51 lines
1.5 KiB
Python

import logging
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from sqlalchemy import update
from datetime import datetime, timezone
from db.models import PanelSyncStatus
SINGLETON_ID = 1
async def get_panel_sync_status(
session: AsyncSession) -> Optional[PanelSyncStatus]:
return await session.get(PanelSyncStatus, SINGLETON_ID)
async def update_panel_sync_status(
session: AsyncSession,
status: str,
details: str,
users_processed: int = 0,
subs_synced: int = 0,
last_sync_time: Optional[datetime] = None) -> PanelSyncStatus:
if last_sync_time is None:
last_sync_time = datetime.now(timezone.utc)
sync_record = await get_panel_sync_status(session)
if sync_record:
sync_record.last_sync_time = last_sync_time
sync_record.status = status
sync_record.details = details
sync_record.users_processed_from_panel = users_processed
sync_record.subscriptions_synced = subs_synced
else:
sync_record = PanelSyncStatus(
id=SINGLETON_ID,
last_sync_time=last_sync_time,
status=status,
details=details,
users_processed_from_panel=users_processed,
subscriptions_synced=subs_synced)
session.add(sync_record)
await session.flush()
await session.refresh(sync_record)
logging.info(
f"Panel sync status updated: {status}, Users: {users_processed}, Subs: {subs_synced}"
)
return sync_record