From ffdb528360f5940081a634e2000399dbcd1ddfb1 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 27 Aug 2025 16:26:13 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(api):=20menambahkan=20controll?= =?UTF-8?q?er=20API=20untuk=20ringkasan=20saldo=20rekening?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Menambahkan `AccountBalanceController` dengan endpoint `GET /api/balance`. - Integrasi dengan `AccountBalanceService` untuk pengelolaan logika bisnis. - Validasi request menggunakan `BalanceSummaryRequest`. - Formatting response dengan `BalanceSummaryResource`. - Menyediakan ringkasan saldo, transaksi, dan metadata dengan response JSON konsisten. --- .../Api/AccountBalanceController.php | 69 +++++++++++++++++++ routes/api.php | 6 ++ 2 files changed, 75 insertions(+) create mode 100644 app/Http/Controllers/Api/AccountBalanceController.php diff --git a/app/Http/Controllers/Api/AccountBalanceController.php b/app/Http/Controllers/Api/AccountBalanceController.php new file mode 100644 index 0000000..afc67a2 --- /dev/null +++ b/app/Http/Controllers/Api/AccountBalanceController.php @@ -0,0 +1,69 @@ +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 + ); + + return (new BalanceSummaryResource($result))->response(); + + } catch (Exception $e) { + Log::error('Error getting account balance summary', [ + 'error' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'trace' => $e->getTraceAsString() + ]); + + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan saat mengambil data saldo', + 'error' => config('app.debug') ? $e->getMessage() : null + ], 500); + } + } +} diff --git a/routes/api.php b/routes/api.php index 6e62916..310abd2 100644 --- a/routes/api.php +++ b/routes/api.php @@ -3,7 +3,13 @@ use Illuminate\Support\Facades\Route; use Modules\Webstatement\Http\Controllers\CustomerController; use Modules\Webstatement\Http\Controllers\EmailBlastController; + use Modules\Webstatement\Http\Controllers\Api\AccountBalanceController; Route::post('/email-blast', [EmailBlastController::class, 'sendEmailBlast']); Route::get('/email-blast-history', [EmailBlastController::class, 'getEmailBlastHistory']); Route::get('/customers/search', [CustomerController::class, 'search']); + + // Account Balance API Routes + Route::prefix('balance')->group(function () { + Route::get('/', [AccountBalanceController::class, 'getBalanceSummary']); + });