Simpl-Resultat/src/services
le king fu 8cb7e53698
All checks were successful
PR Check / rust (pull_request) Successful in 24m30s
PR Check / frontend (pull_request) Successful in 2m38s
fix(db): serialize DB access to fix "database is locked"; live-update log console
Database lock (the reported 0.10.0 regression):
- tauri-plugin-sql loads SQLite through a default multi-connection sqlx pool
  (Pool::connect => max_connections = 10) and exposes no JS transaction
  primitive. BEGIN and COMMIT issued as separate db.execute calls could land on
  different pooled connections, stranding an open write transaction on an idle
  connection — a permanent write lock until app restart. Triggered when the
  Bilan page's concurrent reads interleaved with an in-flight snapshot save.
- Fix: funnel every db operation through one FIFO lock in db.ts; withTransaction
  holds it across the whole BEGIN..COMMIT so a transaction's statements never
  span connections (and the saves become genuinely atomic). A reentrancy guard
  lets nested getDb() calls run directly instead of deadlocking. Applied to all
  5 transaction sites (saveSnapshotAtomic, upsertSnapshotLines,
  proposeStarterAccounts, applyKeywordWithReassignment, applyMigration) via
  in-place helper extraction. New db.test.ts covers serialization,
  cross-transaction non-interleaving, reentrancy, and lock release on error.

Log console (Settings -> Systems -> Journaux):
- getLogs returned the same mutated array reference, so useSyncExternalStore
  (identity comparison) never re-rendered on a new log -> the console never
  updated live. getLogs now returns an immutable snapshot rebuilt on each
  mutation (stable between mutations, new identity after each).
- Add logInfo/logWarn/logError app-logging API and instrument the snapshot save
  (info on success, error on failure) so DB issues surface in the console.

tsc + 635 vitest + vite build green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:50:39 -04:00
..
adjustmentService.ts feat: add Budget and Adjustments pages with full functionality 2026-02-12 00:58:43 +00:00
authService.ts feat: settings banner when OAuth tokens fall back to file store (#81) 2026-04-14 08:18:41 -04:00
balance.service.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
balance.service.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
budgetService.ts feat: show actual transactions in budget previous year column 2026-03-10 23:03:26 -04:00
categorizationService.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
categorizationService.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
categoryBackupService.test.ts test(categories): complete test coverage for migration flow (#123) 2026-04-21 19:25:13 -04:00
categoryBackupService.ts feat(categories): add categoryBackupService for pre-migration SREF backup (#120) 2026-04-19 15:46:23 -04:00
categoryMappingService.test.ts test(categories): complete test coverage for migration flow (#123) 2026-04-21 19:25:13 -04:00
categoryMappingService.ts feat(categories): add categoryMappingService (4-pass algo) (#119) 2026-04-20 21:01:55 -04:00
categoryMigrationService.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
categoryMigrationService.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
categoryRestoreService.test.ts feat(categories): add restore backup banner and permanent restore action (#122) 2026-04-20 21:47:43 -04:00
categoryRestoreService.ts feat(categories): add restore backup banner and permanent restore action (#122) 2026-04-20 21:47:43 -04:00
categoryService.ts feat(categories): add v1 IPC seed, i18n keys, and migration v8 (#115) 2026-04-19 16:41:55 -04:00
categoryTaxonomyService.test.ts feat(categories): add categoryTaxonomyService + useCategoryTaxonomy hook (#116) 2026-04-20 20:53:15 -04:00
categoryTaxonomyService.ts feat(categories): add categoryTaxonomyService + useCategoryTaxonomy hook (#116) 2026-04-20 20:53:15 -04:00
dashboardService.ts Bump version to 0.6.0 — Reports enhancements and comment visibility fix 2026-03-04 21:01:13 -05:00
dataExportService.ts feat: make settings data imports visible in Import History 2026-02-15 13:38:51 +00:00
db.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
db.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
feedbackService.test.ts feat: feedback hub widget in Settings Logs card (#67) 2026-04-17 14:36:26 +00:00
feedbackService.ts feat: feedback hub widget in Settings Logs card (#67) 2026-04-17 14:36:26 +00:00
importConfigTemplateService.ts feat: persist template selection and add update template button 2026-02-15 13:16:55 +00:00
importedFileService.ts feat(transactions): inline transfer icon + FK error message 2026-04-25 16:38:46 -04:00
importSourceService.ts fix: persist has_header for imports, fix orphan categories, add re-initialize 2026-02-12 11:54:33 +00:00
licenseService.ts feat: Maximus Account OAuth2 PKCE + machine activation + subscription check (#51, #53) 2026-04-10 14:18:51 -04:00
logService.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
logService.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
profileService.ts fix: address reviewer feedback (#54) 2026-04-09 15:46:27 -04:00
reportService.cartes.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
reportService.test.ts fix(db): serialize DB access to fix "database is locked"; live-update log console 2026-06-30 16:50:39 -04:00
reportService.ts feat(reports/cartes): Mensuel/YTD toggle on KPI cards + user guide section (#102) 2026-04-19 09:49:21 -04:00
transactionService.ts feat(transactions): inline transfer icon + FK error message 2026-04-25 16:38:46 -04:00
userPreferenceService.ts feat(prices): Settings revocation toggle for price_fetching_consent 2026-04-27 08:41:15 -04:00