fix(balance): snapshots orphelins quand save echoue apres INSERT du snapshot row #176
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#176
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Description
L'utilisateur rapporte: save snapshot bloque avec message "changer la date" alors qu'aucun snapshot n'est visible a cette date. Cause: snapshots orphelins (zero ligne) crees par des saves precedents qui ont throw apres l'INSERT du snapshot row mais avant l'INSERT des lignes.
src/hooks/useSnapshotEditor.ts:434executecreateSnapshotAVANT de valider les lignes. Sisnapshot_priced_quantity_required/snapshot_priced_unit_price_required/snapshot_value_invalidthrow, le snapshot row reste orphelin en BDD et bloque tout save futur a cette date via le checksnapshot_date_taken.Approche (decidee 2026-04-30)
1) Atomicite via BEGIN/COMMIT explicite + validate-first
Refactor
savedansuseSnapshotEditor.ts:426-508:simpleLines+pricedLinesavec tous lesthrow new BalanceServiceError(...)(lignes 443-497) AVANT toute mutation BDDawait db.execute("BEGIN")INSERT INTO balance_snapshots ...(viacreateSnapshot)INSERT INTO balance_snapshot_lines ...(viaupsertSnapshotLines)await db.execute("COMMIT")sur succesawait db.execute("ROLLBACK")dans lecatchPattern deja utilise dans
categorizationService.ts:226etcategoryMigrationService.ts:184.2) Cleanup des orphelins existants via Migration v10
Ajouter dans
src-tauri/src/lib.rs:S'execute une fois sur les profils existants. Le BEGIN/COMMIT empeche desormais la creation de nouveaux orphelins -> pas besoin de helper runtime.
Fichiers concernes
src/hooks/useSnapshotEditor.ts:426-508- refactorsave(validate-first + BEGIN/COMMIT)src/hooks/useSnapshotEditor.test.ts- test transactionnelsrc/services/balance.service.ts- eventuellement helpercleanupOrphanSnapshots()exporte pour testssrc/services/balance.service.test.ts- test du cleanupsrc-tauri/src/lib.rs- Migration { version: 10, ... }src-tauri/src/database/consolidated_schema.sql- PAS modifie (la migration s'applique aux profils existants, le schema consolide initial reste tel quel)docs/architecture.md- section "Bilan" mise a jour si helper exporteCHANGELOG.md+CHANGELOG.fr.md- section FixedDepends on
Criteres d'acceptation
BEGIN/INSERT snapshots/INSERT lines/COMMIT(ouROLLBACKsur erreur) verifiable dans les testscargo check(migration v10) +npm test+npm run buildverts[Unreleased]->Fixed(FR + EN)Decisions prises ce soir
categorizationService.ts:226)consolidated_schema.sql(la migration suffit; les nouveaux profils ne peuvent pas avoir d'orphelins puisqu'ils ne contiennent rien au depart)Spec source
spec-plan-bilan-anomalies-174.md