feat(strategy): expose configurable nick contract

This commit is contained in:
2026-08-15 23:38:18 +09:00
parent acfaab7fd4
commit e6a90800ec
8 changed files with 189 additions and 60 deletions
+20 -9
View File
@@ -3,6 +3,7 @@
from __future__ import annotations
import json
from typing import NoReturn
from fastapi import APIRouter, Depends, HTTPException, Response, status
@@ -11,7 +12,11 @@ from app.core.config import Settings, get_settings
from app.domain.models import StrategySet
from app.repositories.factory import get_portfolio_repository_from_settings
from app.schemas.portfolio import CreateStrategySetRequest, UpdateStrategySetRequest
from app.schemas.v1 import StrategyCreateRequest, StrategyResponse, StrategyUpdateRequest
from app.schemas.v1 import (
StrategyCreateRequest,
StrategyResponse,
StrategyUpdateRequest,
)
from app.services.strategy_set_service import (
StrategyConflictError,
StrategyInactiveError,
@@ -44,6 +49,7 @@ def _response(strategy: StrategySet) -> StrategyResponse:
parsed = {}
return StrategyResponse(
strategy_id=strategy.id,
nick=strategy.nick,
name=strategy.name,
config=parsed if isinstance(parsed, dict) else {},
status=strategy.status,
@@ -53,7 +59,7 @@ def _response(strategy: StrategySet) -> StrategyResponse:
)
def _raise_strategy_error(exc: ValueError) -> None:
def _raise_strategy_error(exc: ValueError) -> NoReturn:
if isinstance(exc, StrategyNotFoundError):
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
if isinstance(exc, (StrategyInactiveError, StrategyInUseError, StrategyConflictError)):
@@ -129,14 +135,18 @@ def create_admin_strategy(
) -> StrategyResponse:
service, repository = _get_service(settings)
try:
strategy = service.create(
CreateStrategySetRequest(
name=body.name,
config=_canonical_config(body.config),
status=body.status,
try:
strategy = service.create(
CreateStrategySetRequest(
name=body.name,
nick=body.nick,
config=_canonical_config(body.config),
status=body.status,
)
)
)
return _response(strategy)
return _response(strategy)
except ValueError as exc:
_raise_strategy_error(exc)
finally:
_close_repository(repository)
@@ -155,6 +165,7 @@ def update_admin_strategy(
strategy_id,
UpdateStrategySetRequest(
name=body.name,
nick=body.nick,
config=_canonical_config(body.config) if body.config is not None else None,
status=body.status,
),