refactor: enforce account scoped repository boundaries

This commit is contained in:
leefer
2026-07-29 17:54:45 +08:00
parent 6ac9571ca0
commit 367fe71fbf
12 changed files with 311 additions and 33 deletions
+52
View File
@@ -0,0 +1,52 @@
from __future__ import annotations
from typing import Any, Protocol
class AlertRepository(Protocol):
def save_alert(
self, user_id: int, kind: str, title: str, content: str,
available_date: str, code: str, dedupe_key: str,
) -> int: ...
def list_alerts(
self, user_id: int, as_of: str, unread_only: bool = False, limit: int = 100,
) -> list[dict[str, Any]]: ...
def count_unread_alerts(self, user_id: int, as_of: str) -> int: ...
def mark_alert_read(self, user_id: int, alert_id: int) -> bool: ...
def mark_all_alerts_read(self, user_id: int, as_of: str) -> int: ...
def delete_alert(self, user_id: int, alert_id: int) -> bool: ...
class TradeJournalRepository(Protocol):
def save_trade_entry(self, *args: Any, **kwargs: Any) -> int: ...
def list_trade_entries(
self, user_id: int, start_date: str = "", end_date: str = "",
code: str = "", limit: int = 300,
) -> list[dict[str, Any]]: ...
def delete_trade_entry(self, user_id: int, trade_id: int) -> bool: ...
class StrategyTrackingRepository(Protocol):
def save_strategy_tracks(
self, user_id: int, run_id: int, selection_date: str,
strategy_name: str, candidates: list[dict[str, Any]],
) -> int: ...
def get_screener_run(self, user_id: int, run_id: int) -> dict[str, Any] | None: ...
def delete_strategy_track(self, user_id: int, track_id: int) -> bool: ...
def list_strategy_tracks(
self, user_id: int, limit_batches: int = 12,
) -> list[dict[str, Any]]: ...
def load_tracking_bars(
self, targets: list[tuple[str, str]], limit: int = 5,
) -> dict[tuple[str, str], list[dict[str, Any]]]: ...