accountBalanceService = $accountBalanceService; } /** * Get account balance summary (opening and closing balance) * * @param BalanceSummaryRequest $request * @return JsonResponse */ public function getBalanceSummary(BalanceSummaryRequest $request): JsonResponse { try { $accountNumber = $request->input('account_number'); $startDate = $request->input('start_date'); $endDate = $request->input('end_date'); Log::info('Account balance summary requested', [ 'account_number' => $accountNumber, 'start_date' => $startDate, 'end_date' => $endDate, 'ip' => $request->ip(), 'user_agent' => $request->userAgent() ]); $result = $this->accountBalanceService->getBalanceSummary( $accountNumber, $startDate, $endDate ); if (empty($result)) { return response()->json( ResponseCode::DATA_NOT_FOUND->toResponse( null, 'Rekening tidak ditemukan' ), ResponseCode::DATA_NOT_FOUND->getHttpStatus() ); } return response()->json( ResponseCode::SUCCESS->toResponse( (new BalanceSummaryResource($result))->toArray($request), ), ResponseCode::SUCCESS->getHttpStatus() ); } catch (Exception $e) { Log::error('Error getting account balance summary', [ 'error' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTraceAsString() ]); $responseCode = match ($e->getCode()) { 404 => ResponseCode::DATA_NOT_FOUND, 401 => ResponseCode::UNAUTHORIZED, 403 => ResponseCode::UNAUTHORIZED, 408 => ResponseCode::TIMEOUT, 503 => ResponseCode::SERVICE_UNAVAILABLE, 400 => ResponseCode::INVALID_FIELD, default => ResponseCode::SYSTEM_MALFUNCTION }; return response()->json( $responseCode->toResponse( null, config('app.debug') ? $e->getMessage() : 'Terjadi kesalahan sistem' ), $responseCode->getHttpStatus() ); } } }