from fastapi import FastAPI, HTTPException, Depends from sqlalchemy.orm import Session from app.database import SessionLocal from app.schema import ADAUSDT, SHIBUSDT, BTCUSDT # Inicjalizacja aplikacji FastAPI app = FastAPI() # Funkcja do tworzenia sesji bazy danych def get_db(): db = SessionLocal() try: yield db finally: db.close() # Endpoint GET: Pobranie listy coinów @app.get("/coins/") def get_coins(db: Session = Depends(get_db)): # Lista modeli reprezentujących różne coiny coin_models = { "ADAUSDT": ADAUSDT, "SHIBUSDT": SHIBUSDT, "BTCUSDT": BTCUSDT, } coins_data = {} # Iteracja po dostępnych coinach i pobranie ostatnich wartości for coin_name, model in coin_models.items(): last_entry = db.query(model).order_by(model.timestamp.desc()).first() if last_entry: coins_data[coin_name] = { "timestamp": last_entry.timestamp, "open": last_entry.open, "high": last_entry.high, "low": last_entry.low, "close": last_entry.close, "volume": last_entry.volume, } if not coins_data: raise HTTPException(status_code=404, detail="No coin data available.") return coins_data # Endpoint GET: Pobranie szczegółowych danych dla konkretnego coina @app.get("/coins/{coin_name}") def get_coin_details(coin_name: str, db: Session = Depends(get_db)): # Mapowanie nazwy coina na model coin_models = { "ADAUSDT": ADAUSDT, "SHIBUSDT": SHIBUSDT, "BTCUSDT": BTCUSDT, } if coin_name not in coin_models: raise HTTPException(status_code=404, detail=f"Coin {coin_name} not found.") model = coin_models[coin_name] # Pobierz wszystkie dane dla danego coina coin_data = db.query(model).order_by(model.timestamp.desc()).all() if not coin_data: raise HTTPException(status_code=404, detail=f"No data available for {coin_name}.") # Zwróć dane jako listę słowników return [ { "timestamp": entry.timestamp, "open": entry.open, "high": entry.high, "low": entry.low, "close": entry.close, "volume": entry.volume, } for entry in coin_data ]