Add delete for closed trade records.
Only closed groups can be removed from local history; equity is unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -190,3 +190,46 @@ async def group_detail(
|
||||
"fills": [_row(x) for x in fills],
|
||||
"pnl_summary": gr.get("pnl_summary"),
|
||||
}
|
||||
|
||||
|
||||
@router.delete("/groups/{group_id}")
|
||||
async def delete_group(
|
||||
group_id: str, _user: Annotated[str, Depends(require_user)]
|
||||
) -> dict:
|
||||
"""删除一条已平仓交易记录(组/成交/残留/相关账本流水)。不回滚权益。"""
|
||||
db = get_db()
|
||||
g = db.fetchone("SELECT * FROM groups WHERE group_id=?", (group_id,))
|
||||
if g is None:
|
||||
raise HTTPException(status_code=404, detail="group not found")
|
||||
status = str(g["status"] or "").lower()
|
||||
if status != "closed":
|
||||
raise HTTPException(
|
||||
status_code=409,
|
||||
detail="只能删除已平仓记录;持仓中或开仓中的组不可删",
|
||||
)
|
||||
pos = db.fetchone("SELECT group_id FROM positions WHERE id=1")
|
||||
if pos and str(pos["group_id"] or "") == group_id:
|
||||
raise HTTPException(
|
||||
status_code=409,
|
||||
detail="当前持仓仍引用该组,不可删除",
|
||||
)
|
||||
with db._lock:
|
||||
db._conn.execute("DELETE FROM fills WHERE group_id=?", (group_id,))
|
||||
db._conn.execute(
|
||||
"DELETE FROM residual_options WHERE group_id=?", (group_id,)
|
||||
)
|
||||
db._conn.execute(
|
||||
"DELETE FROM ledger_entries WHERE group_id=?", (group_id,)
|
||||
)
|
||||
cur = db._conn.execute(
|
||||
"DELETE FROM groups WHERE group_id=? AND status='closed'",
|
||||
(group_id,),
|
||||
)
|
||||
if cur.rowcount <= 0:
|
||||
db._conn.rollback()
|
||||
raise HTTPException(
|
||||
status_code=409,
|
||||
detail="删除失败:组状态已变更",
|
||||
)
|
||||
db._conn.commit()
|
||||
return {"ok": True, "group_id": group_id}
|
||||
|
||||
Reference in New Issue
Block a user