61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
from fastapi import APIRouter, Cookie
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from app.services.market_overview import get_crypto_market_overview
|
|
from app.web.shared import require_api_user_with_subscription
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/api/market/overview")
|
|
async def api_market_overview(hours: int = 24, altcoin_session: str = Cookie(default="")):
|
|
require_api_user_with_subscription(altcoin_session)
|
|
crypto_market = {}
|
|
market_error = ""
|
|
try:
|
|
crypto_market = get_crypto_market_overview()
|
|
except Exception as exc:
|
|
market_error = str(exc)[:500]
|
|
newsfeed = {}
|
|
ai_analysis = {}
|
|
try:
|
|
from app.web.routes_content import _newsfeed_payload
|
|
|
|
newsfeed = _newsfeed_payload()
|
|
except Exception:
|
|
newsfeed = {}
|
|
try:
|
|
from app.services.llm_insights import get_latest_sentiment_batch_analysis
|
|
|
|
latest_sentiment = get_latest_sentiment_batch_analysis()
|
|
if latest_sentiment:
|
|
ai_analysis = {
|
|
"status": latest_sentiment.get("status"),
|
|
"updated_at": latest_sentiment.get("updated_at"),
|
|
"model": latest_sentiment.get("model"),
|
|
"prompt_version": latest_sentiment.get("prompt_version"),
|
|
"content": latest_sentiment.get("content") or {},
|
|
"input": latest_sentiment.get("input") or {},
|
|
}
|
|
except Exception:
|
|
ai_analysis = {}
|
|
payload = {
|
|
"hours": int(hours or 24),
|
|
"updated_at": crypto_market.get("updated_at"),
|
|
"market": {
|
|
"crypto_market": crypto_market,
|
|
"market_error": market_error,
|
|
"newsfeed": newsfeed,
|
|
"ai_analysis": ai_analysis,
|
|
},
|
|
}
|
|
return JSONResponse(
|
|
payload,
|
|
headers={
|
|
"Cache-Control": "no-cache, no-store, must-revalidate",
|
|
"Pragma": "no-cache",
|
|
"Expires": "0",
|
|
},
|
|
)
|