whisper-money/app/Http
Víctor Falcón a69c602366
fix(transactions): prevent crash when sorting by nullable column (#501)
## Problem
`GET /transactions` throws `InvalidArgumentException: Illegal operator
and value combination` (Sentry
[PHP-LARAVEL-34](https://whisper-money.sentry.io/issues/PHP-LARAVEL-34)
— escalating, 76 occurrences, 2 users).

## Root cause
Laravel's `cursorPaginate()` builds `where(orderColumn, '>',
cursorValue)` for the next page. When sorting by a **nullable** column
(`creditor_name` / `debtor_name`) and the boundary row's value is
`null`, the cursor encodes `null` → `prepareValueAndOperator` rejects
`where(col, '>', null)`. Default sort (`transaction_date`, NOT NULL)
never hits it.

## Fix
When sorting by a nullable column, select `COALESCE(col, '') as
col_sort` and order by the alias. Cursor reads the coalesced
(never-null) value; Laravel rewrites the WHERE to the `COALESCE`
expression. Alias is hidden from serialization.

## Tests
- Reproduces cross-page cursor pagination with null values in the sort
column (500 → 200).
- Asserts the `*_sort` alias is not leaked to the frontend.

Fixes PHP-LARAVEL-34
2026-06-06 17:23:21 +02:00
..
Controllers fix(transactions): prevent crash when sorting by nullable column (#501) 2026-06-06 17:23:21 +02:00
Middleware fix(perf): batch feature flag resolution in shared Inertia data (#500) 2026-06-06 12:00:12 +02:00
Requests feat(transactions): save and reuse transaction filters (#496) 2026-06-05 18:00:14 +02:00
Responses fix: route new PWA guests to signup (#313) 2026-04-21 10:53:05 +01:00