📚 Reorganized documentation files and renamed for clarity
This commit is contained in:
@@ -916,44 +916,76 @@ def api_approve_request(request_id):
|
||||
@guest_blueprint.route('/api/requests/<int:request_id>/deny', methods=['POST'])
|
||||
@approver_required
|
||||
def api_deny_request(request_id):
|
||||
"""Gastanfrage ablehnen."""
|
||||
"""Gastanfrage ablehnen mit robuster Fehlerbehandlung."""
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
rejection_reason = data.get('reason', '')
|
||||
# Content-Type prüfen
|
||||
if not request.is_json and request.content_type != 'application/json':
|
||||
return jsonify({"error": "Content-Type muss application/json sein"}), 400
|
||||
|
||||
if not rejection_reason.strip():
|
||||
return jsonify({"error": "Ablehnungsgrund ist erforderlich"}), 400
|
||||
data = request.get_json()
|
||||
if not data:
|
||||
return jsonify({"error": "Keine JSON-Daten erhalten"}), 400
|
||||
|
||||
# Reason validation verbessert
|
||||
rejection_reason = data.get('reason', '').strip()
|
||||
if not rejection_reason or len(rejection_reason) < 3:
|
||||
return jsonify({
|
||||
"error": "Ablehnungsgrund ist erforderlich (mindestens 3 Zeichen)",
|
||||
"field": "reason"
|
||||
}), 400
|
||||
|
||||
with get_cached_session() as db_session:
|
||||
guest_request = db_session.query(GuestRequest).filter_by(id=request_id).first()
|
||||
if not guest_request:
|
||||
return jsonify({"error": "Anfrage nicht gefunden"}), 404
|
||||
|
||||
if guest_request.status != "pending":
|
||||
return jsonify({"error": "Anfrage wurde bereits bearbeitet"}), 400
|
||||
|
||||
# Anfrage ablehnen
|
||||
guest_request.status = "denied"
|
||||
guest_request.processed_by = current_user.id
|
||||
guest_request.processed_at = datetime.now()
|
||||
guest_request.rejection_reason = rejection_reason
|
||||
|
||||
db_session.commit()
|
||||
|
||||
logger.info(f"Gastanfrage {request_id} abgelehnt von Admin {current_user.id} ({current_user.username}): {rejection_reason}")
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"status": "denied",
|
||||
"rejected_by": current_user.username,
|
||||
"rejected_at": guest_request.processed_at.isoformat(),
|
||||
"reason": rejection_reason,
|
||||
"message": "Anfrage wurde abgelehnt"
|
||||
})
|
||||
|
||||
try:
|
||||
guest_request = db_session.query(GuestRequest).filter_by(id=request_id).first()
|
||||
if not guest_request:
|
||||
return jsonify({
|
||||
"error": "Anfrage nicht gefunden",
|
||||
"request_id": request_id
|
||||
}), 404
|
||||
|
||||
# Status-Validation verbessert
|
||||
if guest_request.status not in ["pending"]:
|
||||
return jsonify({
|
||||
"error": f"Anfrage kann im Status '{guest_request.status}' nicht abgelehnt werden",
|
||||
"current_status": guest_request.status,
|
||||
"allowed_statuses": ["pending"]
|
||||
}), 400
|
||||
|
||||
# Transaktion mit besserer Fehlerbehandlung
|
||||
guest_request.status = "denied"
|
||||
guest_request.processed_by = current_user.id
|
||||
guest_request.processed_at = datetime.now()
|
||||
guest_request.rejection_reason = rejection_reason
|
||||
|
||||
# Commit mit expliziter Fehlerbehandlung
|
||||
db_session.commit()
|
||||
|
||||
logger.info(f"Gastanfrage {request_id} abgelehnt von Admin {current_user.id} ({current_user.username}): {rejection_reason}")
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"status": "denied",
|
||||
"request_id": request_id,
|
||||
"rejected_by": current_user.username,
|
||||
"rejected_at": guest_request.processed_at.isoformat(),
|
||||
"reason": rejection_reason,
|
||||
"message": "Anfrage wurde erfolgreich abgelehnt"
|
||||
})
|
||||
|
||||
except Exception as db_error:
|
||||
db_session.rollback()
|
||||
logger.error(f"Datenbankfehler beim Ablehnen der Anfrage {request_id}: {str(db_error)}")
|
||||
return jsonify({
|
||||
"error": "Datenbankfehler beim Verarbeiten der Anfrage",
|
||||
"details": str(db_error) if current_app.debug else None
|
||||
}), 500
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Ablehnen der Gastanfrage: {str(e)}")
|
||||
return jsonify({"error": "Fehler beim Verarbeiten der Anfrage"}), 500
|
||||
logger.error(f"Unerwarteter Fehler beim Ablehnen der Gastanfrage {request_id}: {str(e)}")
|
||||
return jsonify({
|
||||
"error": "Unerwarteter Serverfehler",
|
||||
"details": str(e) if current_app.debug else None
|
||||
}), 500
|
||||
|
||||
@guest_blueprint.route('/api/admin/requests/<int:request_id>/otp', methods=['GET'])
|
||||
@approver_required
|
||||
|
Reference in New Issue
Block a user