rebuild(stage-8): deliver market insight workspaces
This commit is contained in:
@@ -5,14 +5,22 @@ from typing import Any
|
||||
from backend.data.gateway import DataGateway, MarketDataUnavailable
|
||||
from backend.data.providers.base import ProviderError
|
||||
from backend.data.quality import DataQualityError
|
||||
from backend.features.market.insights import MarketInsightService
|
||||
from backend.features.market.insights.service import MarketInsightError
|
||||
from backend.features.market.sync import MarketSnapshotService, SnapshotSyncError
|
||||
from backend.http.errors import AppError
|
||||
|
||||
|
||||
class MarketService:
|
||||
def __init__(self, gateway: DataGateway, snapshots: MarketSnapshotService) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
gateway: DataGateway,
|
||||
snapshots: MarketSnapshotService,
|
||||
insights: MarketInsightService,
|
||||
) -> None:
|
||||
self._gateway = gateway
|
||||
self._snapshots = snapshots
|
||||
self._insights = insights
|
||||
|
||||
def context(self, requested_date: str | None = None) -> dict[str, Any]:
|
||||
context = self._call(self._gateway.trade_context, requested_date)
|
||||
@@ -94,11 +102,37 @@ class MarketService:
|
||||
self._gateway.sector_members, trade_date, sector_name, representative
|
||||
)
|
||||
|
||||
def insight(
|
||||
self, key: str, requested_date: str | None, user_id: int
|
||||
) -> dict[str, Any]:
|
||||
return self._call(self._insights.workspace, key, requested_date, user_id=user_id)
|
||||
|
||||
def sync_insight(
|
||||
self, key: str, requested_date: str | None, user_id: int
|
||||
) -> dict[str, Any]:
|
||||
return self._call(
|
||||
self._insights.workspace, key, requested_date, user_id=user_id, force=True
|
||||
)
|
||||
|
||||
def theme_detail(self, identifier: str, requested_date: str | None = None) -> dict[str, Any]:
|
||||
return self._call(self._insights.theme_detail, identifier, requested_date)
|
||||
|
||||
def save_seat_alias(
|
||||
self, seat_name: str, alias_name: str, user_id: int
|
||||
) -> dict[str, str]:
|
||||
return self._call(self._insights.save_seat_alias, seat_name, alias_name, user_id)
|
||||
|
||||
@staticmethod
|
||||
def _call(function, *args):
|
||||
def _call(function, *args, **kwargs):
|
||||
try:
|
||||
return function(*args)
|
||||
except (MarketDataUnavailable, ProviderError, DataQualityError, SnapshotSyncError) as exc:
|
||||
return function(*args, **kwargs)
|
||||
except (
|
||||
MarketDataUnavailable,
|
||||
ProviderError,
|
||||
DataQualityError,
|
||||
SnapshotSyncError,
|
||||
MarketInsightError,
|
||||
) as exc:
|
||||
raise AppError("market_data_unavailable", str(exc), 503) from exc
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user