diff --git a/backend/src/tools/dateien/routes.js b/backend/src/tools/dateien/routes.js index fab12d3..c9d7204 100644 --- a/backend/src/tools/dateien/routes.js +++ b/backend/src/tools/dateien/routes.js @@ -200,6 +200,18 @@ router.post('/', authenticate, (req, res) => { // ── 3D-Modelle Hilfsendpoints ───────────────────────────────────────────────── +// Sucht einen Ordner ohne ihn anzulegen – gibt null zurück wenn nicht gefunden +router.get('/find-folder', authenticate, (req, res) => { + const uid = req.user.id; + const { name, parent_id } = req.query; + if (!name?.trim()) return res.json(null); + const parentId = parent_id ? parseInt(parent_id) : null; + const folder = parentId + ? db.prepare('SELECT * FROM folders WHERE user_id=? AND name=? AND parent_id=?').get(uid, name.trim(), parentId) + : db.prepare('SELECT * FROM folders WHERE user_id=? AND name=? AND parent_id IS NULL').get(uid, name.trim()); + res.json(folder ? enrichFolder(folder) : null); +}); + // Stellt sicher dass ein Ordner existiert (Name + optionaler parent), gibt ihn zurück router.post('/ensure-folder', authenticate, (req, res) => { const uid = req.user.id; diff --git a/frontend/src/tools/kalkulator3d.jsx b/frontend/src/tools/kalkulator3d.jsx index d8274bb..f05c070 100644 --- a/frontend/src/tools/kalkulator3d.jsx +++ b/frontend/src/tools/kalkulator3d.jsx @@ -147,13 +147,15 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile, setA const modelFileRef = useRef(null); const sv = (k, v) => setVars(p => ({ ...p, [k]: v })); - // Im Bearbeitungsmodus: existierende Dateien laden + // Im Bearbeitungsmodus: existierende Dateien laden (ohne Ordner zu erstellen) useEffect(() => { if (!editData?.id || !editData?.name) return; (async () => { try { - const base = await api('/tools/dateien/ensure-folder', { body: { name: '3D-Modelle' } }); - const sub = await api('/tools/dateien/ensure-folder', { body: { name: editData.name.trim(), parent_id: base.id } }); + const base = await api(`/tools/dateien/find-folder?name=3D-Modelle`); + if (!base) return; // Basisordner existiert noch nicht → keine Dateien + const sub = await api(`/tools/dateien/find-folder?name=${encodeURIComponent(editData.name.trim())}&parent_id=${base.id}`); + if (!sub) return; // Unterordner existiert nicht → keine Dateien setModelFolderId(sub.id); const data = await api(`/tools/dateien?folder_id=${sub.id}`); setExistingFiles(data.own || []); @@ -201,9 +203,17 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile, setA if (editData?.id) { await api(`/tools/kalkulator3d/${editData.id}`, { method:'PUT', body:payload }); // Neue Dateien hochladen falls vorhanden - if (modelFiles.length > 0 && modelFolderId) { + if (modelFiles.length > 0) { + let folderId = modelFolderId; + if (!folderId) { + // Ordner erst jetzt anlegen wenn wirklich Dateien da sind + const base = await api('/tools/dateien/ensure-folder', { body: { name: '3D-Modelle' } }); + const sub = await api('/tools/dateien/ensure-folder', { body: { name: editData.name.trim(), parent_id: base.id } }); + folderId = sub.id; + setModelFolderId(folderId); + } const form = new FormData(); - form.append('folder_id', modelFolderId); + form.append('folder_id', folderId); for (const f of modelFiles) form.append('files', f); await fetch('/api/tools/dateien/upload-3d', { method:'POST', @@ -211,8 +221,7 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile, setA body: form, }); setModelFiles([]); - // Dateien neu laden - const data = await api(`/tools/dateien?folder_id=${modelFolderId}`); + const data = await api(`/tools/dateien?folder_id=${folderId}`); setExistingFiles(data.own || []); } toast('Aktualisiert ✓'); onEditDone?.();