""" Dev-only endpoint: manually insert a fake post to test the full pipeline. """ import asyncio from datetime import datetime, timezone from fastapi import APIRouter, BackgroundTasks, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db, AsyncSessionLocal from app.models import Post, iso_utc from app.ws.manager import manager import hashlib, time router = APIRouter() @router.post("/dev/fake-post") async def insert_fake_post( text: str = "BITCOIN is the future of money! We will make America the greatest crypto capital EVER!", sentiment: str = "bullish", db: AsyncSession = Depends(get_db), ): external_id = hashlib.md5(f"fake-{time.time()}".encode()).hexdigest() post = Post( external_id=external_id, text=text, source="truth", published_at=datetime.now(timezone.utc).replace(tzinfo=None), sentiment=sentiment, ai_confidence=88, relevant=True, price_impact_asset="BTC", price_impact_m5=1.2, price_impact_m15=2.4, price_impact_m1h=3.1, price_at_post=94230.0, ) db.add(post) await db.commit() await db.refresh(post) await manager.broadcast({ "type": "new_post", "post": { "id": post.id, "text": post.text, "source": post.source, "published_at": iso_utc(post.published_at), "sentiment": post.sentiment, "ai_confidence": post.ai_confidence, "relevant": post.relevant, "price_impact": { "asset": "BTC", "m5": 1.2, "m15": 2.4, "m1h": 3.1, "price_at_post": 94230.0 }, }, }) return {"id": post.id, "text": post.text[:80]} @router.post("/dev/backfill-prices") async def trigger_price_backfill(background_tasks: BackgroundTasks, asset: str = "BTC"): """触发历史帖子价格回溯(后台运行)""" from app.services.price_backfill import backfill_price_impact background_tasks.add_task(backfill_price_impact, AsyncSessionLocal, asset) return {"status": "started", "asset": asset, "message": "后台回溯中,约需 1-2 分钟"}