Files
webstatement/app/Jobs/UpdateAtmCardBranchCurrencyJob.php
Daeng Deni Mardaeni df097a279f refactor(webstatement): optimalkan sinkronisasi dan pembaruan data kartu ATM
- Menghapus dependensi yang tidak digunakan untuk memperingkas kode.
- Memisahkan logika pembaruan branch dan currency menjadi job terpisah `UpdateAtmCardBranchCurrencyJob`.
- Menambahkan penjadwalan job untuk pembaruan branch dan currency setelah sinkronisasi kartu selesai.
- Mengubah query database untuk sinkronisasi kartu menjadi lebih sederhana.
- Menambahkan binding `UpdateAtmCardBranchCurrencyJob` di service provider.

Refactor ini meningkatkan readability dan modularitas kode dengan memisahkan tanggung jawab tiap proses.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-09 15:42:18 +07:00

118 lines
3.4 KiB
PHP

<?php
namespace Modules\Webstatement\Jobs;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Modules\Webstatement\Models\Atmcard;
class UpdateAtmCardBranchCurrencyJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* API constants
*/
private const API_BASE_PATH = '/restgateway/services/IGATEToCoreBankingServices';
private const API_INQUIRY_PATH = '/InquiryBalanceService';
/**
* The ATM card to update.
*
* @var Atmcard
*/
protected $card;
/**
* Create a new job instance.
*
* @param Atmcard $card
* @return void
*/
public function __construct(Atmcard $card)
{
$this->card = $card;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(): void
{
try {
if ($this->needBranchAndCurrencyUpdate()) {
$accountInfo = $this->getAccountInfo($this->card->accflag);
if ($accountInfo && isset($accountInfo['responseCode']) && $accountInfo['responseCode'] === '00') {
$this->updateBranchAndCurrency($accountInfo);
Log::info("Berhasil memperbarui branch dan currency untuk kartu {$this->card->crdno}");
} else {
Log::warning("Gagal mendapatkan informasi akun untuk kartu {$this->card->crdno}. Response: " .
json_encode($accountInfo ?? ['error' => 'No response']));
}
}
} catch (Exception $e) {
Log::error("Error saat memperbarui branch dan currency untuk kartu {$this->card->crdno}: " . $e->getMessage(), [
'file' => $e->getFile(),
'line' => $e->getLine()
]);
}
}
/**
* Check if branch and currency update is needed
*
* @return bool
*/
private function needBranchAndCurrencyUpdate(): bool
{
return empty($this->card->branch) || empty($this->card->currency);
}
/**
* Get account information from the API
*
* @param string $accountNumber
* @return array|null
*/
private function getAccountInfo(string $accountNumber): ?array
{
try {
$url = env('FIORANO_URL') . self::API_BASE_PATH;
$path = self::API_INQUIRY_PATH;
$data = [
'accountNo' => $accountNumber
];
$response = Http::post($url . $path, $data);
return $response->json();
} catch (Exception $e) {
Log::error("Gagal mendapatkan informasi akun: " . $e->getMessage());
return null;
}
}
/**
* Update branch and currency information for the card
*
* @param array $accountInfo
* @return void
*/
private function updateBranchAndCurrency(array $accountInfo): void
{
$cardData = [
'branch' => !empty($accountInfo['acctCompany']) ? $accountInfo['acctCompany'] : null,
'currency' => !empty($accountInfo['acctCurrency']) ? $accountInfo['acctCurrency'] : null,
];
$this->card->update($cardData);
}
}