From b7a1b70cf727d143c52daa5eca47a61829f0edbe Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Tue, 25 Aug 2026 21:31:35 +0200 Subject: [PATCH] changes to the booking processin g --- Website/main.py | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/Website/main.py b/Website/main.py index f63eeb5..258a2a7 100644 --- a/Website/main.py +++ b/Website/main.py @@ -1,4 +1,4 @@ -from flask import Flask, render_template, request, jsonify, flash, redirect, url_for, get_flashed_messages, session, send_file, after_this_request, abort, send_from_directory +from flask import Flask, render_template, request, jsonify, flash, redirect, url_for, get_flashed_messages, session, send_file, after_this_request, abort, send_from_directory, current_app import os import json import atexit @@ -2174,7 +2174,7 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to # 1. Set Status to In Progress req_col.update_one({"_id": ObjectId(prov_id)}, {"$set": {"provision_status": "in_progress"}}) - # 2. Dynamically determine next Port and Password (Proven working logic) + # 2. Dynamically determine next Port and Password existing_tenants = Instance.list() used_ports = [t['port'] for t in existing_tenants if 'port' in t] next_port = max(used_ports) + 1 if used_ports else 10002 @@ -2186,7 +2186,6 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to raise Exception("Tenant shell creation failed (Instance.new returned False)") # 4. Enable selected Modules - # Always enable "starter" as a baseline if needed, then the booked ones if "starter" not in modules_to_provision: Instance.edit(subdomain, "starter") @@ -2249,6 +2248,7 @@ def background_booking_provisioning(app_instance, prov_id, subdomain, modules_to finally: req_client.close() + @app.route('/booking/payment', methods=['GET', 'POST']) @login_required def booking_payment(): @@ -2379,7 +2379,6 @@ def booking_payment(): raw_base = form_data.get("school_name") or session.get("username") or booking_number base = _slugify_subdomain(raw_base).lower()[:51] - # Subdomain-Prüfung über das korrekte Instance Model try: existing_tenants = Instance.list() or [] existing_subdomains = [ @@ -2424,30 +2423,27 @@ def booking_payment(): valid_modules = set(BOOKING_PACKAGE_MAP.keys()) modules_to_provision = {pkg for pkg in package_list if pkg in valid_modules} - # Flask App Context für den Thread sicher abrufen - app_obj = app + app_obj = current_app._get_current_object() + user_id = session.get("user_id") user_email = session.get("email") or form_data.get("contact_email") - try: - thread = threading.Thread( - target=background_booking_provisioning, - args=(app_obj, prov_id, subdomain, modules_to_provision, user_id, form_data["school_name"], user_email) - ) - thread.start() - print(f"[INFO] Background provisioning gestartet für Subdomain: {subdomain}") - except Exception as thread_err: - print(f"[ERROR] Fehler beim Starten des Background Threads: {thread_err}") + thread = threading.Thread( + target=background_booking_provisioning, + args=(app_obj, prov_id, subdomain, modules_to_provision, user_id, form_data["school_name"], user_email) + ) + thread.start() + print(f"[INFO] Background provisioning gestartet für Subdomain: {subdomain}") flash(f"Buchung für {selected_package} wurde erfasst. Die Instanz wird jetzt eingerichtet.", "success") return redirect(url_for("my_instance_management")) - except PyMongoError as pe: - print(f"[ERROR] Database error in booking_payment: {pe}") - flash("Buchungsanfrage konnte nicht gesendet werden. Bitte versuchen Sie es erneut.", "error") + except Exception as e: + print(f"[FATAL ERROR] In booking_payment Route:") + traceback.print_exc() + flash("Buchungsanfrage konnte nicht gesendet werden. Ein unerwarteter Fehler ist aufgetreten.", "error") return render_template("schnell_buchung.html", **review_data) - @app.route('/instance_request/delete', methods=['POST']) @login_required def instance_request_delete():