import os from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from sqlalchemy import text from .database import engine, Base, SessionLocal from .routes import users, purchases, stats, history, admin, candles Base.metadata.create_all(bind=engine) app = FastAPI(title="BTC Portfolio API") origins = os.getenv("ALLOWED_ORIGINS", "http://localhost:3000,http://localhost:3001").split(",") app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], allow_headers=["Content-Type", "Authorization"], ) app.include_router(users.router) app.include_router(purchases.router) app.include_router(stats.router) app.include_router(history.router) app.include_router(admin.router, prefix="/admin") app.include_router(candles.router) @app.on_event("startup") def startup(): # Schema migration: add is_admin column if missing with engine.connect() as conn: cols = [r[1] for r in conn.execute(text("PRAGMA table_info(users)"))] if "is_admin" not in cols: conn.execute(text("ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT 0")) conn.commit() # Seed / refresh BTC candle data from .services.candles import refresh_latest_candles db = SessionLocal() try: refresh_latest_candles(db) finally: db.close() @app.get("/") def root(): return {"message": "BTC Portfolio API"}