import asyncio import logging from datetime import datetime, timezone from src.domain.news.usecases import FetchAndPublishNews logger = logging.getLogger(__name__) class NewsChecker: """ Входящий адаптер: запускает FetchAndPublishNews каждые 5 минут. Реальный интервал опроса каждой RSS контролируется subscription.interval_minutes. """ CHECK_INTERVAL_SECONDS: int = 5 * 60 def __init__(self, usecase: FetchAndPublishNews) -> None: self._usecase = usecase async def start(self) -> None: """Запускается как asyncio-задача из main.py.""" logger.info("NewsChecker запущен, интервал %d сек", self.CHECK_INTERVAL_SECONDS) while True: await asyncio.sleep(self.CHECK_INTERVAL_SECONDS) await self._run_once() async def _run_once(self) -> None: now = datetime.now(tz=timezone.utc) logger.debug("NewsChecker: запуск проверки %s", now.isoformat()) try: await self._usecase.execute(now) except Exception: logger.exception("Ошибка в NewsChecker")