Files
Tools/backend/app.py
T
2025-06-14 18:45:33 +02:00

78 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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('/<path:path>')
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)