## Problem The categorizer was reading transactions exclusively from the browser's IndexedDB (Dexie), which is only populated via an on-demand sync triggered from the import drawer. When an account was deleted (soft-deleting all its transactions), those transactions remained in the local IndexedDB and kept appearing in the categorizer on subsequent visits. ## Solution - **`TransactionController::categorize()`** now queries uncategorized transactions directly from the database (`WHERE category_id IS NULL`) with their account and bank eager-loaded, and passes them as an Inertia prop alongside the existing `categories`, `accounts`, `banks`, and `labels`. - **`categorize.tsx`** drops all Dexie/`useLiveQuery` dependencies. The transaction list now comes from the Inertia prop; client-side decryption runs once on mount (the encryption key remains client-side only — the server never sees it). Category assignment (`transactionSyncService.update()`) is unchanged. ## Tests Added 5 new feature tests covering: - Categorize page is accessible to authenticated users and includes the `transactions` prop - Only uncategorized transactions are returned - Transactions from deleted accounts are excluded - Transactions from other users are not visible - Guests are redirected to login |
||
|---|---|---|
| .. | ||
| Controllers | ||
| Middleware | ||
| Requests | ||
| Responses | ||