diff --git a/btc-portfolio/backend/app/routes/candles.py b/btc-portfolio/backend/app/routes/candles.py index b286be4..3339f17 100644 --- a/btc-portfolio/backend/app/routes/candles.py +++ b/btc-portfolio/backend/app/routes/candles.py @@ -1,9 +1,12 @@ from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session +from datetime import datetime, timezone from ..database import get_db from .. import models from ..dependencies import get_current_user +from ..services.candles import refresh_latest_candles +from ..services.btc import get_btc_price_eur router = APIRouter() @@ -14,6 +17,9 @@ def get_candles( db: Session = Depends(get_db), current_user: models.User = Depends(get_current_user), ): + # Refresh candles on every request (no-op if DB is already current) + refresh_latest_candles(db) + query = db.query(models.OHLCCandle).order_by(models.OHLCCandle.date.asc()) if days != "all": @@ -38,6 +44,26 @@ def get_candles( for c in candles_db ] + # Patch today's candle with the live price so it tracks intraday movement + today = datetime.now(tz=timezone.utc).strftime("%Y-%m-%d") + live_price, _ = get_btc_price_eur() + if live_price and candles: + last = candles[-1] + if last["date"] == today: + last["close"] = round(live_price, 2) + last["high"] = round(max(last["high"], live_price), 2) + last["low"] = round(min(last["low"], live_price), 2) + elif last["date"] < today: + # No candle for today yet — create a synthetic one from live price + prev_close = last["close"] + candles.append({ + "date": today, + "open": prev_close, + "high": round(max(prev_close, live_price), 2), + "low": round(min(prev_close, live_price), 2), + "close": round(live_price, 2), + }) + purchases_db = db.query(models.Purchase).filter( models.Purchase.user_id == current_user.id ).all() diff --git a/btc-portfolio/frontend/src/components/BTCCandlestickChart.js b/btc-portfolio/frontend/src/components/BTCCandlestickChart.js index 94e5946..5282862 100644 --- a/btc-portfolio/frontend/src/components/BTCCandlestickChart.js +++ b/btc-portfolio/frontend/src/components/BTCCandlestickChart.js @@ -39,7 +39,7 @@ const btnStyle = { marginLeft: '0.5rem', }; -export default function BTCCandlestickChart({ candles, purchases, stats, fullscreen, onToggleFullscreen }) { +export default function BTCCandlestickChart({ candles, purchases, stats, fullscreen, onToggleFullscreen, livePrice }) { const containerRef = useRef(null); const chartRef = useRef(null); const candleSeriesRef = useRef(null); @@ -167,7 +167,14 @@ export default function BTCCandlestickChart({ candles, purchases, stats, fullscr return (
-
BTC Candles (EUR)
+
+ BTC Candles (EUR) + {livePrice != null && ( + + €{livePrice.toLocaleString()} + + )} +