Files
AccountForger-neuerUpload/domain/repositories/rate_limit_repository.py
Claude Project Manager 04585e95b6 Initial commit
2025-08-01 23:50:28 +02:00

75 Zeilen
2.4 KiB
Python

"""
Rate limit repository interface.
"""
from abc import ABC, abstractmethod
from typing import Optional, List, Dict
from datetime import datetime
from domain.entities.rate_limit_policy import RateLimitPolicy
class IRateLimitRepository(ABC):
"""Interface for rate limit data persistence."""
@abstractmethod
def save_policy(self, policy: RateLimitPolicy) -> None:
"""Save or update a rate limit policy."""
pass
@abstractmethod
def get_policy(self, platform: str, action: str) -> Optional[RateLimitPolicy]:
"""Get rate limit policy for platform and action."""
pass
@abstractmethod
def get_all_policies(self, platform: str = None) -> List[RateLimitPolicy]:
"""Get all policies, optionally filtered by platform."""
pass
@abstractmethod
def record_action(self, platform: str, action: str,
success: bool = True, proxy: str = None) -> None:
"""Record an action for rate limit tracking."""
pass
@abstractmethod
def get_action_count(self, platform: str, action: str,
window_minutes: int = 60,
proxy: str = None) -> int:
"""Get action count within time window."""
pass
@abstractmethod
def get_recent_actions(self, platform: str, action: str,
limit: int = 100) -> List[Dict[str, any]]:
"""Get recent actions for analysis."""
pass
@abstractmethod
def is_rate_limited(self, platform: str, action: str,
proxy: str = None) -> bool:
"""Check if action is currently rate limited."""
pass
@abstractmethod
def get_wait_time(self, platform: str, action: str,
proxy: str = None) -> int:
"""Get wait time in seconds before next action allowed."""
pass
@abstractmethod
def reset_limits(self, platform: str = None, action: str = None,
proxy: str = None) -> int:
"""Reset rate limits. Returns count of records affected."""
pass
@abstractmethod
def get_limit_status(self, platform: str) -> Dict[str, Dict[str, any]]:
"""Get current rate limit status for all actions on platform."""
pass
@abstractmethod
def cleanup_old_records(self, days_to_keep: int = 7) -> int:
"""Remove old rate limit records. Returns count deleted."""
pass