📚 Improved codebase structure & logging enhancements 🚀
This commit is contained in:
@ -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):
|
||||
|
Reference in New Issue
Block a user