feat: add portfolio ownership model, auth guards, and migration
This commit is contained in:
@@ -49,6 +49,7 @@ def _to_portfolio_summary(portfolio: Portfolio):
|
||||
status=portfolio.status,
|
||||
name=portfolio.name,
|
||||
symbol=portfolio.symbol,
|
||||
owner_user_id=portfolio.owner_user_id,
|
||||
cash_balance=portfolio.cash_balance,
|
||||
asset_quantity=portfolio.asset_quantity,
|
||||
price=portfolio.price,
|
||||
@@ -137,8 +138,14 @@ class PortfolioService:
|
||||
def __init__(self, repository: PortfolioRepository) -> None:
|
||||
self._repository = repository
|
||||
|
||||
def list_portfolios(self, *, broker: str | None = None, status: str | None = None) -> list[PortfolioListItem]:
|
||||
portfolios = self._repository.list_portfolios(broker=broker, status=status)
|
||||
def list_portfolios(
|
||||
self,
|
||||
*,
|
||||
broker: str | None = None,
|
||||
status: str | None = None,
|
||||
owner_user_id: str | None = None,
|
||||
) -> list[PortfolioListItem]:
|
||||
portfolios = self._repository.list_portfolios(broker=broker, status=status, owner_user_id=owner_user_id)
|
||||
return [
|
||||
PortfolioListItem(
|
||||
**_to_portfolio_summary(portfolio).model_dump(),
|
||||
@@ -151,7 +158,12 @@ class PortfolioService:
|
||||
status_result = get_portfolio_status(self._repository, portfolio_id, recent_trades=recent_trades)
|
||||
return _to_detail_response(status_result)
|
||||
|
||||
def create_portfolio(self, payload: CreatePortfolioRequest) -> PortfolioDetailResponse:
|
||||
def create_portfolio(
|
||||
self,
|
||||
payload: CreatePortfolioRequest,
|
||||
*,
|
||||
owner_user_id: str = "system",
|
||||
) -> PortfolioDetailResponse:
|
||||
active_strategy_id = payload.active_strategy_id
|
||||
if active_strategy_id is None:
|
||||
strategy_set = self._repository.get_or_create_strategy_set(
|
||||
@@ -162,6 +174,7 @@ class PortfolioService:
|
||||
avabile_strategies = _merge_strategy_ids(active_strategy_id, payload.avabile_strategies)
|
||||
portfolio = self._repository.create_portfolio(
|
||||
payload.portfolio_id,
|
||||
owner_user_id=owner_user_id,
|
||||
broker=payload.broker,
|
||||
status=payload.status,
|
||||
name=payload.name or payload.symbol,
|
||||
|
||||
Reference in New Issue
Block a user