From 75e55fde9c72cc99e2b099e92e60c359da0eb2ac Mon Sep 17 00:00:00 2001 From: Justin Ko Date: Sun, 16 Aug 2026 13:13:39 +0900 Subject: [PATCH] feat(api): expose strategy nick on portfolio items --- app/api/v1_portfolios.py | 1 + app/domain/models.py | 1 + app/repositories/postgres.py | 6 +++++- app/schemas/v1.py | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/api/v1_portfolios.py b/app/api/v1_portfolios.py index 5cd7a26..b26d25a 100644 --- a/app/api/v1_portfolios.py +++ b/app/api/v1_portfolios.py @@ -108,6 +108,7 @@ def _portfolio_to_item( # REQ-055: 전략·시장 메타데이터 additive 필드 active_strategy_id=portfolio.active_strategy_id, strategy_name=portfolio.strategy_name, + strategy_nick=portfolio.strategy_nick, strategy_params=portfolio.strategy_params, strategy_revision=portfolio.strategy_revision, markets=portfolio.markets, diff --git a/app/domain/models.py b/app/domain/models.py index 2d81ba8..35dc03c 100644 --- a/app/domain/models.py +++ b/app/domain/models.py @@ -120,6 +120,7 @@ class Portfolio: profit_buffer: float = 0.0 active_strategy_id: str | None = None strategy_name: str | None = None # REQ-055: strategy_sets.name JOIN 결과 + strategy_nick: str | None = None # REQ-055: strategy_sets.nick JOIN 결과 strategy_params: dict[str, Any] = field(default_factory=dict) # REQ-055: strategy_sets.config 파싱 결과 strategy_revision: int | None = None markets: list[str] = field(default_factory=list) # REQ-055: assets.markets JOIN 결과 diff --git a/app/repositories/postgres.py b/app/repositories/postgres.py index b347659..ce53690 100644 --- a/app/repositories/postgres.py +++ b/app/repositories/postgres.py @@ -73,7 +73,8 @@ _SELECT_PORTFOLIO = """ ss.name, ss.config, a.markets, - ss.revision + ss.revision, + ss.nick FROM portfolios p JOIN assets a ON p.asset_id = a.asset_id LEFT JOIN strategy_sets ss ON p.active_strategy_id = ss.id @@ -572,6 +573,8 @@ class PostgresPortfolioRepository: _markets_raw = row[21] if len(row) > 21 else None markets: list[str] = list(_markets_raw) if _markets_raw else [] strategy_revision = int(row[22]) if len(row) > 22 and row[22] is not None else None + # REQ-055: strategy_nick (row[23] = ss.nick from LEFT JOIN strategy_sets) + strategy_nick: str | None = row[23] if len(row) > 23 else None return Portfolio( portfolio_id=row[0], @@ -595,6 +598,7 @@ class PostgresPortfolioRepository: tag_ids=[str(t) for t in row[17]] if len(row) > 17 and row[17] is not None else [], display_name=row[18] if len(row) > 18 else None, strategy_name=strategy_name, + strategy_nick=strategy_nick, strategy_params=strategy_params, strategy_revision=strategy_revision, markets=markets, diff --git a/app/schemas/v1.py b/app/schemas/v1.py index 91b1747..8a4f3f4 100644 --- a/app/schemas/v1.py +++ b/app/schemas/v1.py @@ -286,6 +286,7 @@ class PortfolioItem(BaseModel): # REQ-055: 전략·시장 메타데이터 additive 필드 active_strategy_id: str | None = None strategy_name: str | None = None + strategy_nick: str | None = None strategy_params: dict[str, Any] = Field(default_factory=dict) strategy_revision: int | None = Field(default=None, ge=1) markets: list[str] = Field(default_factory=list)