feat(autorenewal): implement automatic subscription renewal system
This commit is contained in:
29
bot/scheduler.py
Normal file
29
bot/scheduler.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
|
||||
|
||||
from services.renewal_service import RenewalService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def run_autorenewal(renewal_service: RenewalService, session_factory: async_sessionmaker):
|
||||
async with session_factory() as session:
|
||||
try:
|
||||
results = await renewal_service.process_autorenewals(session)
|
||||
logger.info("Autorenewal job completed: %s", results)
|
||||
except Exception:
|
||||
logger.exception("Autorenewal job failed")
|
||||
await session.rollback()
|
||||
|
||||
|
||||
async def start_scheduler(
|
||||
renewal_service: RenewalService,
|
||||
session_factory: async_sessionmaker,
|
||||
interval_hours: int = 24,
|
||||
):
|
||||
logger.info("Starting autorenewal scheduler with interval %dh", interval_hours)
|
||||
while True:
|
||||
await run_autorenewal(renewal_service, session_factory)
|
||||
await asyncio.sleep(interval_hours * 3600)
|
||||
Reference in New Issue
Block a user