from __future__ import annotations import os, json, threading from flask import Flask, jsonify, render_template, abort from trading_bot import main as trading_bot_main # dostosuj jeśli moduł nazywa się inaczej # Katalog projektu (tam gdzie leży ten plik) BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # Domyślnie dane są w głównym katalogu projektu; można nadpisać przez env DATA_DIR DATA_DIR = os.environ.get("DATA_DIR", BASE_DIR) def _load_json(name: str): path = os.path.join(DATA_DIR, name) if not os.path.isfile(path): return None try: with open(path, "r", encoding="utf-8") as f: return json.load(f) except Exception: return None app = Flask( __name__, static_folder="static", static_url_path="/static", # <-- ważne: z wiodącym slashem template_folder="templates", ) @app.route("/") def index(): return render_template("index.html") @app.route("/api/snapshot") def api_snapshot(): data = _load_json("snapshot.json") if data is None: abort(404, description="snapshot.json not found") return jsonify(data) @app.route("/api/history") def api_history(): data = _load_json("portfolio_history.json") if data is None: abort(404, description="portfolio_history.json not found") return jsonify(data) @app.route("/api/positions") def api_positions(): data = _load_json("positions.json") if data is None: data = [] return jsonify(data) @app.route("/api/trades") def api_trades(): data = _load_json("trade_log.json") if data is None: data = [] return jsonify(data) def start_trading_bot(): """Uruchamia bota w osobnym wątku.""" trading_thread = threading.Thread(target=trading_bot_main, daemon=True) trading_thread.start() print("[Flask] Trading bot uruchomiony w wątku.") if __name__ == "__main__": print(f"[Flask] DATA_DIR: {DATA_DIR}") start_trading_bot() app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)