from flask import Flask, request, render_template, jsonify, redirect, send_from_directory from datenbankverbindung import lade_db_config, speichere_db_config, teste_verbindung, initialisiere_admin_user import time import os app = Flask(__name__) app.template_folder = "templates" CONFIG_PATH = "config/db_config.json" MAX_WAIT = 30 # In Sekunden WAIT_INTERVAL = 10 def ist_konfiguriert(): return os.path.exists(CONFIG_PATH) def versuche_verbindung_mit_warten(): elapsed = 0 if not ist_konfiguriert(): return False config = lade_db_config() while not teste_verbindung(config) and elapsed < MAX_WAIT: print(f"[INFO] DB nicht erreichbar – warte {WAIT_INTERVAL}s...") time.sleep(WAIT_INTERVAL) elapsed += WAIT_INTERVAL return elapsed < MAX_WAIT @app.route('/api/status') def status(): if not ist_konfiguriert(): return jsonify({"status": "init", "db_connected": False}) elif teste_verbindung(lade_db_config()): return jsonify({"status": "ready", "db_connected": True}) else: return jsonify({"status": "error", "db_connected": False}) @app.route('/setup', methods=['GET', 'POST']) def setup(): if request.method == 'POST': db_config = { "host": request.form['host'], "port": int(request.form['port']), "user": request.form['user'], "password": request.form['password'], "database": request.form['database'] } speichere_db_config(db_config) if teste_verbindung(db_config): initialisiere_admin_user(db_config) # <- das hier NEU return redirect('/') else: return "Verbindung fehlgeschlagen. Bitte zurück und prüfen.", 500 return render_template('setup.html') @app.route('/', defaults={'path': ''}) @app.route('/') def serve_react(path): if not ist_konfiguriert() or not teste_verbindung(lade_db_config()): return redirect('/setup') # setup und API dürfen nicht von React überdeckt werden if path.startswith('setup') or path.startswith('api'): return redirect(f'/{path}') # Pfad zu frontend/dist absolut auflösen dist_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'frontend', 'dist')) file_path = os.path.join(dist_dir, path) if path and os.path.exists(file_path): return send_from_directory(dist_dir, path) else: return send_from_directory(dist_dir, 'index.html') if __name__ == '__main__': os.makedirs("config", exist_ok=True) app.run(host='127.0.0.1', port=5000)