Description
Bulk operations write row-by-row with no transaction wrapping. Partial failures commit half-imported / half-deleted state. By contrast documents.rs correctly uses pool.begin().
Current State
src-tauri/src/bulk_import.rs:106-113 — clear_all_data issues 5 sequential DELETEs, no transaction. Interrupted run leaves DB inconsistent.
src-tauri/src/bulk_import.rs — import_reviews_bulk, import_employees_bulk insert rows individually, no transaction.
src-tauri/src/data_quality.rs — dedupe / merge operations run multiple writes without atomicity.
Suggested Fix
Verification
Automation Hints
scope: src-tauri/src/bulk_import.rs, src-tauri/src/data_quality.rs
do-not-touch: src-tauri/src/documents.rs (already correct, use as reference)
approach: add-declarations
risk: medium (transaction semantics)
max-files-changed: 2
blocked-by: none
bail-if: none
Priority
Medium — data-integrity protection for import failure modes.
Description
Bulk operations write row-by-row with no transaction wrapping. Partial failures commit half-imported / half-deleted state. By contrast
documents.rscorrectly usespool.begin().Current State
src-tauri/src/bulk_import.rs:106-113—clear_all_dataissues 5 sequential DELETEs, no transaction. Interrupted run leaves DB inconsistent.src-tauri/src/bulk_import.rs—import_reviews_bulk,import_employees_bulkinsert rows individually, no transaction.src-tauri/src/data_quality.rs— dedupe / merge operations run multiple writes without atomicity.Suggested Fix
let mut tx = pool.begin().await?;→ usetxfor all writes →tx.commit().await?at the end.tx(rollback is automatic).Verification
cargo test bulk_importpasses + add a test that simulates mid-import error and verifies no partial rows remain.Automation Hints
scope: src-tauri/src/bulk_import.rs, src-tauri/src/data_quality.rs
do-not-touch: src-tauri/src/documents.rs (already correct, use as reference)
approach: add-declarations
risk: medium (transaction semantics)
max-files-changed: 2
blocked-by: none
bail-if: none
Priority
Medium — data-integrity protection for import failure modes.