📚 Improved codebase structure & logging enhancements 🚀

This commit is contained in:
2025-06-01 04:26:09 +02:00
parent 1a3bfa4094
commit 19eeed46fb
29 changed files with 1918 additions and 494 deletions

View File

@ -2129,6 +2129,100 @@ def create_user_api():
user_logger.error(f"Fehler beim Erstellen eines Benutzers: {str(e)}")
return jsonify({"error": "Interner Serverfehler"}), 500
@app.route("/api/admin/users/<int:user_id>", methods=["GET"])
@login_required
@admin_required
def get_user_api(user_id):
"""Gibt einen einzelnen Benutzer zurück (nur für Admins)."""
try:
db_session = get_db_session()
user = db_session.get(User, user_id)
if not user:
db_session.close()
return jsonify({"error": "Benutzer nicht gefunden"}), 404
user_data = {
"id": user.id,
"username": user.username,
"email": user.email,
"name": user.name or "",
"role": user.role,
"is_admin": user.is_admin,
"is_active": user.is_active,
"created_at": user.created_at.isoformat() if user.created_at else None,
"last_login": user.last_login.isoformat() if hasattr(user, 'last_login') and user.last_login else None
}
db_session.close()
return jsonify({"success": True, "user": user_data})
except Exception as e:
user_logger.error(f"Fehler beim Abrufen des Benutzers {user_id}: {str(e)}")
return jsonify({"error": "Interner Serverfehler"}), 500
@app.route("/api/admin/users/<int:user_id>", methods=["PUT"])
@login_required
@admin_required
def update_user_api(user_id):
"""Aktualisiert einen Benutzer (nur für Admins)."""
try:
data = request.json
db_session = get_db_session()
user = db_session.get(User, user_id)
if not user:
db_session.close()
return jsonify({"error": "Benutzer nicht gefunden"}), 404
# Prüfen, ob bereits ein anderer Benutzer mit dieser E-Mail existiert
if "email" in data and data["email"] != user.email:
existing_user = db_session.query(User).filter(
User.email == data["email"],
User.id != user_id
).first()
if existing_user:
db_session.close()
return jsonify({"error": "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits"}), 400
# Aktualisierbare Felder
if "email" in data:
user.email = data["email"]
if "username" in data:
user.username = data["username"]
if "name" in data:
user.name = data["name"]
if "is_admin" in data:
user.role = "admin" if data["is_admin"] else "user"
if "is_active" in data:
user.is_active = data["is_active"]
# Passwort separat behandeln
if "password" in data and data["password"]:
user.set_password(data["password"])
db_session.commit()
user_data = {
"id": user.id,
"username": user.username,
"email": user.email,
"name": user.name,
"role": user.role,
"is_admin": user.is_admin,
"is_active": user.is_active,
"created_at": user.created_at.isoformat() if user.created_at else None
}
db_session.close()
user_logger.info(f"Benutzer {user_id} aktualisiert von Admin {current_user.id}")
return jsonify({"success": True, "user": user_data})
except Exception as e:
user_logger.error(f"Fehler beim Aktualisieren des Benutzers {user_id}: {str(e)}")
return jsonify({"error": "Interner Serverfehler"}), 500
@app.route("/api/admin/printers/<int:printer_id>/toggle", methods=["POST"])
@login_required
def toggle_printer_power(printer_id):