주식 매도 히스토리 API 추가 (/api/portfolio/sell-history)
- sell_history 테이블 신규 생성 (db.py init_db)
- CRUD 함수 추가: add_sell_history, get_sell_history, delete_sell_history
- GET /api/portfolio/sell-history (broker, days 필터)
- POST /api/portfolio/sell-history (id 포함 저장된 레코드 반환)
- DELETE /api/portfolio/sell-history/{record_id}
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ from .db import (
|
||||
update_portfolio_item, delete_portfolio_item,
|
||||
upsert_broker_cash, get_all_broker_cash, get_broker_cash, delete_broker_cash,
|
||||
upsert_asset_snapshot, get_asset_snapshots,
|
||||
add_sell_history, get_sell_history, delete_sell_history,
|
||||
)
|
||||
from .scraper import fetch_market_news, fetch_major_indices, fetch_overseas_news
|
||||
from .price_fetcher import get_current_prices
|
||||
@@ -361,3 +362,41 @@ def get_snapshot_history(days: int = Query(30, ge=0)):
|
||||
return {"snapshots": snapshots}
|
||||
|
||||
|
||||
# --- Sell History API ---
|
||||
|
||||
class SellHistoryRequest(BaseModel):
|
||||
broker: str
|
||||
ticker: str
|
||||
name: str
|
||||
quantity: int
|
||||
avg_price: float
|
||||
sell_price: float
|
||||
buy_amount: float
|
||||
sell_amount: float
|
||||
realized_profit: float
|
||||
realized_rate: float
|
||||
sold_at: str
|
||||
|
||||
|
||||
@app.get("/api/portfolio/sell-history")
|
||||
def list_sell_history(broker: Optional[str] = None, days: Optional[int] = None):
|
||||
"""매도 내역 조회 (broker, days 필터 선택)"""
|
||||
records = get_sell_history(broker=broker, days=days)
|
||||
return {"records": records}
|
||||
|
||||
|
||||
@app.post("/api/portfolio/sell-history")
|
||||
def create_sell_history(req: SellHistoryRequest):
|
||||
"""매도 기록 저장"""
|
||||
record = add_sell_history(req.model_dump())
|
||||
return record
|
||||
|
||||
|
||||
@app.delete("/api/portfolio/sell-history/{record_id}")
|
||||
def remove_sell_history(record_id: int):
|
||||
"""매도 기록 삭제"""
|
||||
if not delete_sell_history(record_id):
|
||||
return JSONResponse(status_code=404, content={"error": "not found"})
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user