39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import List
|
|
|
|
from .entities import NewsItem
|
|
from ..subscriptions.entities import Subscription
|
|
|
|
|
|
class NewsFetcher(ABC):
|
|
"""Порт для получения новостей из источника."""
|
|
|
|
@abstractmethod
|
|
async def fetch(self, subscription: Subscription) -> List[NewsItem]:
|
|
"""Возвращает все доступные записи из источника."""
|
|
...
|
|
|
|
|
|
class NewsPublisher(ABC):
|
|
"""Порт для публикации новости в комнату."""
|
|
|
|
@abstractmethod
|
|
async def publish(self, room_jid: str, item: NewsItem) -> bool:
|
|
"""
|
|
Отправляет новость в комнату.
|
|
Возвращает False если бот уже не в комнате — сигнал выключить комнату.
|
|
"""
|
|
...
|
|
|
|
|
|
class SentNewsRepository(ABC):
|
|
"""Порт для отслеживания уже отправленных новостей."""
|
|
|
|
@abstractmethod
|
|
async def is_sent(self, room_jid: str, subscription_id: int, news_id: str) -> bool:
|
|
...
|
|
|
|
@abstractmethod
|
|
async def mark_sent(self, room_jid: str, subscription_id: int, news_id: str) -> None:
|
|
...
|