📝 🎉 Improved session management system with new backup database and enhanced logs 🌐

This commit is contained in:
2025-06-12 08:23:49 +02:00
parent 841d4cc466
commit f2be2e65a8
103 changed files with 1351 additions and 508 deletions

View File

@ -540,159 +540,16 @@ def delete_user_api(user_id):
return jsonify({"error": "Fehler beim Löschen des Benutzers"}), 500
# ===== DRUCKER-API-ROUTEN =====
# HINWEIS: Die Drucker-CRUD-Operationen wurden nach app.py verschoben
# für konsistente API-Responses und bessere Wartbarkeit.
# Verwenden Sie die folgenden Endpunkte:
# - GET /api/admin/printers - Alle Drucker abrufen
# - GET /api/admin/printers/<id> - Einzelnen Drucker abrufen
# - POST /api/admin/printers - Neuen Drucker erstellen
# - PUT /api/admin/printers/<id> - Drucker aktualisieren
# - DELETE /api/admin/printers/<id> - Drucker löschen
@admin_blueprint.route("/api/printers", methods=["POST"])
@admin_required
def create_printer_api():
"""Erstellt einen neuen Drucker über die API"""
try:
data = request.json
if not data:
return jsonify({"error": "Keine Daten empfangen"}), 400
# Pflichtfelder prüfen
required_fields = ["name", "location"]
for field in required_fields:
if field not in data or not data[field]:
return jsonify({"error": f"Feld '{field}' ist erforderlich"}), 400
with get_cached_session() as db_session:
# Prüfen ob Name bereits existiert
existing_printer = db_session.query(Printer).filter(Printer.name == data["name"]).first()
if existing_printer:
return jsonify({"error": "Ein Drucker mit diesem Namen existiert bereits"}), 400
# Neuen Drucker erstellen
printer = Printer(
name=data["name"],
location=data["location"],
model=data.get("model", ""),
ip_address=data.get("ip_address", ""),
api_key=data.get("api_key", ""),
plug_ip=data.get("plug_ip", ""),
plug_username=data.get("plug_username", ""),
plug_password=data.get("plug_password", ""),
status="offline"
)
db_session.add(printer)
db_session.commit()
db_session.refresh(printer)
admin_logger.info(f"Drucker {printer.name} erstellt von Admin {current_user.username}")
return jsonify({
"success": True,
"message": "Drucker erfolgreich erstellt",
"printer": printer.to_dict()
})
except Exception as e:
admin_logger.error(f"Fehler beim Erstellen des Druckers: {str(e)}")
return jsonify({"error": "Fehler beim Erstellen des Druckers"}), 500
@admin_blueprint.route("/api/printers/<int:printer_id>", methods=["GET"])
@admin_required
def get_printer_api(printer_id):
"""Gibt einen einzelnen Drucker zurück"""
try:
with get_cached_session() as db_session:
printer = db_session.query(Printer).filter(Printer.id == printer_id).first()
if not printer:
return jsonify({"error": "Drucker nicht gefunden"}), 404
return jsonify({
"success": True,
"printer": printer.to_dict()
})
except Exception as e:
admin_logger.error(f"Fehler beim Abrufen des Druckers: {str(e)}")
return jsonify({"error": "Fehler beim Abrufen des Druckers"}), 500
@admin_blueprint.route("/api/printers/<int:printer_id>", methods=["PUT"])
@admin_required
def update_printer_api(printer_id):
"""Aktualisiert einen Drucker über die API"""
try:
data = request.json
if not data:
return jsonify({"error": "Keine Daten empfangen"}), 400
with get_cached_session() as db_session:
printer = db_session.query(Printer).filter(Printer.id == printer_id).first()
if not printer:
return jsonify({"error": "Drucker nicht gefunden"}), 404
# Prüfen ob neuer Name bereits existiert (falls Name geändert wird)
if "name" in data and data["name"] != printer.name:
existing_printer = db_session.query(Printer).filter(
Printer.name == data["name"],
Printer.id != printer_id
).first()
if existing_printer:
return jsonify({"error": "Ein Drucker mit diesem Namen existiert bereits"}), 400
# Drucker-Eigenschaften aktualisieren
updateable_fields = ["name", "location", "model", "ip_address", "api_key",
"plug_ip", "plug_username", "plug_password"]
for field in updateable_fields:
if field in data:
setattr(printer, field, data[field])
db_session.commit()
admin_logger.info(f"Drucker {printer.name} aktualisiert von Admin {current_user.username}")
return jsonify({
"success": True,
"message": "Drucker erfolgreich aktualisiert",
"printer": printer.to_dict()
})
except Exception as e:
admin_logger.error(f"Fehler beim Aktualisieren des Druckers: {str(e)}")
return jsonify({"error": "Fehler beim Aktualisieren des Druckers"}), 500
@admin_blueprint.route("/api/printers/<int:printer_id>", methods=["DELETE"])
@admin_required
def delete_printer_api(printer_id):
"""Löscht einen Drucker über die API"""
try:
with get_cached_session() as db_session:
printer = db_session.query(Printer).filter(Printer.id == printer_id).first()
if not printer:
return jsonify({"error": "Drucker nicht gefunden"}), 404
# Prüfen ob noch aktive Jobs für diesen Drucker existieren
active_jobs = db_session.query(Job).filter(
Job.printer_id == printer_id,
Job.status.in_(['pending', 'printing', 'paused'])
).count()
if active_jobs > 0:
return jsonify({
"error": f"Drucker kann nicht gelöscht werden. Es gibt noch {active_jobs} aktive Job(s)"
}), 400
printer_name = printer.name
db_session.delete(printer)
db_session.commit()
admin_logger.info(f"Drucker {printer_name} gelöscht von Admin {current_user.username}")
return jsonify({
"success": True,
"message": "Drucker erfolgreich gelöscht"
})
except Exception as e:
admin_logger.error(f"Fehler beim Löschen des Druckers: {str(e)}")
return jsonify({"error": "Fehler beim Löschen des Druckers"}), 500
# Die alten Routen wurden entfernt, um Duplikate zu vermeiden
# ===== ERWEITERTE SYSTEM-API (ursprünglich admin_api.py) =====