From e8b6e625577b1e127a0d8ea4ed01b34ec92ad30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vi=CC=81ctor=20Falco=CC=81n?= Date: Sat, 4 Jul 2026 21:19:09 +0200 Subject: [PATCH] Guard sumTransactions against unsupported category types Both reviewers flagged that the income/expense ternary silently treated any non-Income type as the expense side. Replace it with a match that throws on Savings/Investment/Transfer, so a future miscall fails loudly instead of returning a wrong total. Behavior is unchanged for the only current callers (Income and Expense). --- app/Http/Controllers/Api/CashflowAnalyticsController.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Api/CashflowAnalyticsController.php b/app/Http/Controllers/Api/CashflowAnalyticsController.php index cdad16c4..d6543ab0 100644 --- a/app/Http/Controllers/Api/CashflowAnalyticsController.php +++ b/app/Http/Controllers/Api/CashflowAnalyticsController.php @@ -16,6 +16,7 @@ use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; +use InvalidArgumentException; class CashflowAnalyticsController extends Controller { @@ -218,9 +219,11 @@ class CashflowAnalyticsController extends Controller private function sumTransactions(Collection $transactions, string $userCurrency, CategoryType $type): int { - $onSide = $type === CategoryType::Income - ? fn (Transaction $transaction): bool => $transaction->isIncomeSide() - : fn (Transaction $transaction): bool => $transaction->isExpenseSide(); + $onSide = match ($type) { + CategoryType::Income => fn (Transaction $transaction): bool => $transaction->isIncomeSide(), + CategoryType::Expense => fn (Transaction $transaction): bool => $transaction->isExpenseSide(), + default => throw new InvalidArgumentException("sumTransactions only supports Income and Expense, got {$type->value}."), + }; return $transactions ->filter($onSide)