Initial commit
Dieser Commit ist enthalten in:
75
domain/repositories/rate_limit_repository.py
Normale Datei
75
domain/repositories/rate_limit_repository.py
Normale Datei
@ -0,0 +1,75 @@
|
||||
"""
|
||||
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
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren