from sqlalchemy import delete, select from sqlalchemy.ext.asyncio import AsyncSession from datetime import datetime, timedelta, timezone from app.db import models async def delete_old_sessions(db: AsyncSession): """ Удаляет сессии, которые не были активны более 30 дней. """ thirty_days_ago = datetime.now(timezone.utc) - timedelta(days=30) # Собираем информацию о сессиях, которые будут удалены # Это полезно для отладки и для отправки уведомлений, если потребуется expired_sessions_query = select(models.Session).where(models.Session.last_active < thirty_days_ago) expired_sessions_result = await db.execute(expired_sessions_query) expired_sessions = expired_sessions_result.scalars().all() # Если есть что удалять if expired_sessions: # Здесь можно было бы добавить логику для уведомления пользователей через WebSocket, # но для автоматической очистки это может быть избыточно. # Просто удаляем. delete_query = ( delete(models.Session) .where(models.Session.last_active < thirty_days_ago) ) result = await db.execute(delete_query) await db.commit() print(f"[{datetime.now()}] CRON: Успешно удалено {result.rowcount} истекших сессий.") else: print(f"[{datetime.now()}] CRON: Истекшие сессии для удаления не найдены.")