json(['account_id' => $accountId, 'balance' => $balances->balance($accountId)]); } public function spend(Request $request, int $accountId, BalanceService $balances): JsonResponse { $data = $request->validate([ 'amount' => ['required', 'numeric', 'decimal:0,2', 'gt:0'], 'idempotency_key' => ['required', 'string', 'max:160'], 'description' => ['nullable', 'string', 'max:255'], ]); try { $transaction = $balances->spend( $accountId, (string) $data['amount'], 'game:'.$data['idempotency_key'], $data['description'] ?? null, ); } catch (InvalidArgumentException $exception) { return response()->json(['message' => $exception->getMessage()], 422); } return response()->json([ 'transaction_id' => $transaction->id, 'account_id' => $transaction->account_id, 'amount' => $transaction->amount, 'balance' => $transaction->balance_after, ]); } }