feat(stock): session 판정 + webai monitor-set 엔드포인트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqCYBhvTcdeCTUDX3RhWx9
This commit is contained in:
@@ -29,6 +29,9 @@ from .ai_summarizer import summarize_news, OllamaError
|
||||
from .auth import verify_webai_key
|
||||
from . import webai_cache
|
||||
from . import holdings_intel
|
||||
from .trade_alerts import (
|
||||
build_monitor_set, current_session, DEFAULT_EXIT_PARAMS, DEFAULT_BUY_PARAMS,
|
||||
)
|
||||
|
||||
app = FastAPI()
|
||||
install_access_log(app)
|
||||
@@ -507,6 +510,28 @@ def get_webai_news_sentiment(date: str | None = None):
|
||||
return result
|
||||
|
||||
|
||||
@app.get("/api/webai/trade-alert/monitor-set", dependencies=[Depends(verify_webai_key)])
|
||||
def get_trade_alert_monitor_set():
|
||||
"""web-ai(Windows 워커) 전용 — 실시간 매매 알람 감시대상 조립 (계약 §5.1).
|
||||
|
||||
session은 KST 시각으로 pre/regular/after 판정 후, 평일·휴장 여부(is_market_open)를
|
||||
함께 게이팅해 최종 closed 여부를 결정한다.
|
||||
"""
|
||||
from datetime import datetime, timezone, timedelta
|
||||
kst = timezone(timedelta(hours=9))
|
||||
now_kst = datetime.now(kst)
|
||||
session = current_session(now_kst)
|
||||
if not is_market_open(now_kst.date()):
|
||||
session = "closed"
|
||||
|
||||
from .db import _conn
|
||||
conn = _conn()
|
||||
try:
|
||||
return build_monitor_set(conn, session, DEFAULT_EXIT_PARAMS, DEFAULT_BUY_PARAMS)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.post("/api/portfolio", status_code=201)
|
||||
def create_portfolio_item(req: PortfolioItemRequest):
|
||||
"""포트폴리오 종목 추가"""
|
||||
|
||||
Reference in New Issue
Block a user