Quellcode durchsuchen

fix(backend): force update order_processing module to resolve AttributeError

unknown vor 3 Monaten
Ursprung
Commit
66524574e6
2 geänderte Dateien mit 41 neuen und 1 gelöschten Zeilen
  1. 3 1
      backend/routers/orders.py
  2. 38 0
      backend/services/order_processing.py

+ 3 - 1
backend/routers/orders.py

@@ -12,7 +12,9 @@ import hashlib
 import preview_utils
 import slicer_utils
 from fastapi import APIRouter, Request, Form, Depends, HTTPException, BackgroundTasks, UploadFile, File
-from services import pricing, order_processing, event_hooks
+from services import pricing
+from services import order_processing
+from services import event_hooks
 from services.audit_service import audit_service
 from services.rate_limit_service import rate_limit_service
 from dependencies import get_current_user, require_admin, get_current_user_optional

+ 38 - 0
backend/services/order_processing.py

@@ -1,5 +1,6 @@
 import db
 import slicer_utils
+import preview_utils
 import config
 import os
 from typing import List
@@ -25,3 +26,40 @@ def process_order_slicing(order_id: int):
                     "UPDATE order_files SET print_time = %s, filament_g = %s WHERE id = %s",
                     (result.get('print_time_str'), result.get('filament_g'), f['id'])
                 )
+
+def process_single_file_async(file_id: int):
+    """
+    Background task to generate preview and slice a single file.
+    (Updated to force module reload)
+    """
+    f = db.execute_query("SELECT id, order_id, file_path, filename FROM order_files WHERE id = %s", (file_id,))
+    if not f:
+        return
+    
+    f = f[0]
+    file_path = os.path.join(config.BASE_DIR, f['file_path'])
+    if not os.path.exists(file_path):
+        return
+        
+    file_ext = os.path.splitext(file_path)[1].lower()
+    if file_ext == '.stl':
+        # 1. Generate Preview
+        import uuid
+        preview_filename = f"{uuid.uuid4()}.png"
+        preview_path = os.path.join(config.PREVIEW_DIR, preview_filename)
+        db_preview_path = f"uploads/previews/{preview_filename}"
+        
+        if preview_utils.generate_stl_preview(file_path, preview_path):
+            db.execute_commit("UPDATE order_files SET preview_path = %s WHERE id = %s", (db_preview_path, file_id))
+
+        # 2. Slice for print data
+        result = slicer_utils.slice_model(file_path)
+        if result and result.get('success'):
+            db.execute_commit(
+                "UPDATE order_files SET print_time = %s, filament_g = %s WHERE id = %s",
+                (result.get('print_time_str'), result.get('filament_g'), file_id)
+            )
+            
+    # Notify user/admin via WS if possible?
+    # (Optional: global_manager.notify_order_update could be called here)
+