diff --git a/backend/app/api/routers/admin.py b/backend/app/api/routers/admin.py index e55b887..c89717f 100644 --- a/backend/app/api/routers/admin.py +++ b/backend/app/api/routers/admin.py @@ -607,6 +607,28 @@ async def generate_missing_usd_masters( return {"queued": queued, "message": f"Queued {queued} missing USD master task(s)"} +@router.post("/settings/regenerate-all-canonical-scenes", status_code=status.HTTP_202_ACCEPTED) +async def regenerate_all_canonical_scenes( + admin: User = Depends(require_global_admin), + db: AsyncSession = Depends(get_db), +): + """Re-queue GLB + USD master export for ALL completed CAD files (overwrites existing assets).""" + result = await db.execute( + select(CadFile).where(CadFile.processing_status == ProcessingStatus.completed) + ) + cad_files = result.scalars().all() + + from app.tasks.step_tasks import generate_gltf_geometry_task + queued = 0 + for cad_file in cad_files: + if not cad_file.stored_path: + continue + generate_gltf_geometry_task.delay(str(cad_file.id)) + queued += 1 + + return {"queued": queued, "message": f"Queued {queued} canonical scene regeneration task(s)"} + + @router.post("/settings/recover-stuck-processing", status_code=status.HTTP_200_OK) async def recover_stuck_processing( admin: User = Depends(require_global_admin), diff --git a/frontend/src/pages/Admin.tsx b/frontend/src/pages/Admin.tsx index 44a503a..fdebe60 100644 --- a/frontend/src/pages/Admin.tsx +++ b/frontend/src/pages/Admin.tsx @@ -237,6 +237,12 @@ export default function AdminPage() { onError: (e: any) => toast.error(e.response?.data?.detail || 'Failed'), }) + const regenerateAllCanonicalScenesMut = useMutation({ + mutationFn: () => api.post('/admin/settings/regenerate-all-canonical-scenes'), + onSuccess: (res) => toast.success(res.data.message || 'All canonical scenes re-queued'), + onError: (e: any) => toast.error(e.response?.data?.detail || 'Failed'), + }) + const [smtpDraft, setSmtpDraft] = useState>({}) const smtp = { ...settings, ...smtpDraft } as Settings @@ -958,6 +964,18 @@ export default function AdminPage() {

Queues geometry GLB + USD master for all completed CAD files missing a canonical scene.

+
+ +

Re-exports GLB and USD for all completed CAD files, replacing existing assets.

+