jabnews/src/domain/news/ports.py
2026-03-22 18:07:16 +03:00

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:
...