import time import os from flask import Blueprint, request, render_template, redirect, jsonify, send_from_directory from util.db_config import load_config, save_config, test_connection, is_configured from util.db_pool import reset_pool from auth.setup_admin import initialize_admin_user from util.logger import logger setup_blueprint = Blueprint("setup", __name__, template_folder="../backend/templates", static_folder="../backend/static") MAX_WAIT = 30 WAIT_INTERVAL = 10 def wait_for_db(): elapsed = 0 config = load_config() while not test_connection(config) and elapsed < MAX_WAIT: logger.info(f"[SETUP] DB nicht erreichbar – warte {WAIT_INTERVAL}s...") time.sleep(WAIT_INTERVAL) elapsed += WAIT_INTERVAL return elapsed < MAX_WAIT @setup_blueprint.route('/api/status') def status(): if not is_configured(): return jsonify({"status": "init", "db_connected": False}) elif test_connection(load_config()): return jsonify({"status": "ready", "db_connected": True}) else: return jsonify({"status": "error", "db_connected": False}) @setup_blueprint.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'] } save_config(db_config) reset_pool() if test_connection(db_config): initialize_admin_user(db_config) # Apply schema migrations immediately so all tables exist before # the user lands on the main page. try: from util.db_pool import get_connection from util.migrations import run_migrations conn = get_connection() try: run_migrations(conn) finally: conn.close() except Exception as e: logger.warning(f"[setup] Post-setup migration error: {e}") return redirect('/') else: return "Verbindung fehlgeschlagen. Bitte zurück und prüfen.", 500 return render_template('setup.html')