增加数据同步功能,支持从 akshare 拉取合约日线并自动计算振幅
This commit is contained in:
@@ -3,6 +3,7 @@ from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from sqlalchemy.orm import Session
|
||||
from app.database import get_db
|
||||
from app.models import Product, Contract
|
||||
from app.collector import sync_active_contracts, sync_one_contract
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||
|
||||
@@ -105,3 +106,17 @@ def delete_product(product_id: int, db: Session = Depends(get_db)):
|
||||
db.delete(p)
|
||||
db.commit()
|
||||
return RedirectResponse("/admin/", status_code=303)
|
||||
|
||||
|
||||
@router.post("/sync")
|
||||
def sync_all(request: Request):
|
||||
results = sync_active_contracts()
|
||||
total = sum(results.values())
|
||||
print(f"[sync] Synced {total} bars across {len(results)} contracts: {results}")
|
||||
return RedirectResponse("/admin/?synced=" + str(total), status_code=303)
|
||||
|
||||
|
||||
@router.post("/sync/{contract_code}")
|
||||
def sync_single(contract_code: str):
|
||||
count = sync_one_contract(contract_code.upper())
|
||||
return RedirectResponse(f"/admin/?synced={count}", status_code=303)
|
||||
|
||||
Reference in New Issue
Block a user