diff --git a/frontend/js/main.js b/frontend/js/main.js index fe42db0..c49c2e2 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -96,7 +96,7 @@ async function init() { const result = await window.__TAURI__.core.invoke("import_seed_products"); if (unlisten) unlisten(); - } catch (e) { console.error("[SEED]", e); document.getElementById("boot-label").textContent = "Seed: " + e; } + } catch (e) { console.error("[SEED]", e); alert("Seed error: " + e); } // Apply safe area insets (Android status bar / nav bar) try { diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index fcf42e9..6f4ae0f 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -140,7 +140,9 @@ fn import_seed_products(app: tauri::AppHandle) -> Result { } // Dedup ALWAYS runs (even if seed version matches) — fixes legacy duplicates. - // Fast: <0.2s with index. No-op if no dupes exist. + // Disable FK checks during dedup (refs reassigned before delete, but rusqlite enforces FK by default) + let _ = main_db.execute("PRAGMA foreign_keys = OFF", []); + let _ = main_db.execute( "CREATE INDEX IF NOT EXISTS idx_products_name_lower ON products(name_lower)", []); @@ -178,6 +180,8 @@ fn import_seed_products(app: tauri::AppHandle) -> Result { ON products(name_lower, source, COALESCE(store_id, '')) WHERE name_lower IS NOT NULL", []); + let _ = main_db.execute("PRAGMA foreign_keys = ON", []); + // Check seed version — skip import if already up to date let current_version: i64 = main_db.query_row( "SELECT COALESCE((SELECT value FROM profile WHERE key='seed_version'), '0')",