修复数据采集和清理的bug,新增持仓排名功能,日线数据分页
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -2,8 +2,8 @@ from fastapi import APIRouter, Depends, Form, Request
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from sqlalchemy.orm import Session
|
||||
from app.database import get_db
|
||||
from app.models import Product, Contract, DailyBar, PositionSnapshot
|
||||
from app.collector import sync_active_contracts, sync_one_contract
|
||||
from app.models import Product, Contract, DailyBar, PositionRanking
|
||||
from app.collector import sync_active_contracts, sync_one_contract, sync_position_rankings
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||
|
||||
@@ -113,7 +113,7 @@ def delete_contract(contract_id: int, db: Session = Depends(get_db)):
|
||||
c = db.query(Contract).filter(Contract.id == contract_id).first()
|
||||
if c:
|
||||
db.query(DailyBar).filter(DailyBar.contract == c.code).delete()
|
||||
db.query(PositionSnapshot).filter(PositionSnapshot.contract_code == c.code).delete()
|
||||
db.query(PositionRanking).filter(PositionRanking.contract_code == c.code).delete()
|
||||
db.delete(c)
|
||||
db.commit()
|
||||
return RedirectResponse("/admin/?tab=contract", status_code=303)
|
||||
@@ -125,6 +125,7 @@ def delete_product(product_id: int, db: Session = Depends(get_db)):
|
||||
if p:
|
||||
for c in p.contracts:
|
||||
db.query(DailyBar).filter(DailyBar.contract == c.code).delete()
|
||||
db.query(PositionRanking).filter(PositionRanking.contract_code == c.code).delete()
|
||||
db.delete(p)
|
||||
db.commit()
|
||||
return RedirectResponse("/admin/?tab=product", status_code=303)
|
||||
@@ -144,6 +145,14 @@ def sync_single(contract_code: str):
|
||||
return RedirectResponse(f"/admin/?tab=sync&synced={count}", status_code=303)
|
||||
|
||||
|
||||
@router.post("/sync-positions")
|
||||
def sync_positions(request: Request):
|
||||
results = sync_position_rankings()
|
||||
total = sum(results.values())
|
||||
print(f"[sync] Position rankings: {total} rows across {len(results)} contracts")
|
||||
return RedirectResponse(f"/admin/?tab=sync&pos_synced={total}", status_code=303)
|
||||
|
||||
|
||||
@router.post("/sync/product/{product_id}")
|
||||
def sync_product(product_id: int, request: Request, db: Session = Depends(get_db)):
|
||||
contracts = db.query(Contract).filter(
|
||||
|
||||
Reference in New Issue
Block a user