From 0235f17b0196972e5506eddf5aa125749fff2938 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 8 May 2025 16:23:43 +0700 Subject: [PATCH] refactor(webstatement): optimalkan logika pembaruan kartu ATM - Menambahkan metode untuk mendapatkan data dasar kartu (getCardBaseData). - Menambahkan metode untuk memeriksa apakah pembaruan branch dan currency diperlukan (needBranchAndCurrencyUpdate). - Menambahkan metode untuk memperbarui branch dan currency (updateBranchAndCurrency). - Memisahkan logika menjadi fungsi-fungsi modular untuk meningkatkan keterbacaan dan pemeliharaan kode. - Mengganti logika pembaruan kartu ATM untuk mendukung pembaruan selektif berdasarkan kebutuhan. Signed-off-by: Daeng Deni Mardaeni --- app/Jobs/BiayaKartu.php | 107 +++++++++++++++++++++++++++++----------- 1 file changed, 79 insertions(+), 28 deletions(-) diff --git a/app/Jobs/BiayaKartu.php b/app/Jobs/BiayaKartu.php index 21fe2c1..23ba78d 100644 --- a/app/Jobs/BiayaKartu.php +++ b/app/Jobs/BiayaKartu.php @@ -96,14 +96,80 @@ { foreach ($cards as $card) { try { - $accountInfo = $this->getAccountInfo($card->accflag); - $this->updateOrCreateAtmCard($card, $accountInfo); + $existingCard = $this->getExistingCard($card->crdno); + + // Perbarui data kartu dasar + $cardData = $this->getCardBaseData($card); + + // Periksa jika perlu memperbarui branch dan currency + if ($this->needBranchAndCurrencyUpdate($existingCard)) { + $accountInfo = $this->getAccountInfo($card->accflag); + $this->updateBranchAndCurrency($card->crdno, $accountInfo); + } else { + Atmcard::updateOrCreate(['crdno' => $card->crdno], $cardData); + } } catch (Exception $e) { Log::warning("Gagal memproses kartu {$card->crdno}: " . $e->getMessage()); } } } + /** + * Get existing card from database if exists + * + * @param string $cardNumber + * + * @return Atmcard|null + */ + private function getExistingCard(string $cardNumber) + : ?Atmcard + { + return Atmcard::where('crdno', $cardNumber)->first(); + } + + /** + * Get base data for card update + * + * @param object $card + * + * @return array + */ + private function getCardBaseData(object $card) + : array + { + return [ + 'accflag' => $card->accflag, + 'cracc1' => $card->cracc1, + 'cracc2' => $card->cracc2, + 'cracc3' => $card->cracc3, + 'cracc4' => $card->cracc4, + 'cracc5' => $card->cracc5, + 'craccnam1' => $card->craccnam1, + 'craccnam2' => $card->craccnam2, + 'craccnam3' => $card->craccnam3, + 'craccnam4' => $card->craccnam4, + 'craccnam5' => $card->craccnam5, + 'crsts' => $card->crsts, + 'cttype' => $card->cttype, + 'ctdesc' => $card->ctdesc, + 'last_update' => $card->lastupdate, + ]; + } + + /** + * Check if branch and currency update is needed + * + * @param Atmcard|null $card + * + * @return bool + */ + private function needBranchAndCurrencyUpdate(?Atmcard $card) + : bool + { + // Jika kartu belum ada atau branch/currency belum terisi + return $card === null || empty($card->branch) || empty($card->currency); + } + /** * Get account information from the API * @@ -126,38 +192,23 @@ } /** - * Update or create ATM card record + * Update branch and currency information for a card * - * @param object $card + * @param string $cardNumber * @param array $accountInfo * * @return void */ - private function updateOrCreateAtmCard(object $card, array $accountInfo) + private function updateBranchAndCurrency(string $cardNumber, array $accountInfo) : void { - Atmcard::updateOrCreate( - ['crdno' => $card->crdno], - [ - 'accflag' => $card->accflag, - 'cracc1' => $card->cracc1, - 'cracc2' => $card->cracc2, - 'cracc3' => $card->cracc3, - 'cracc4' => $card->cracc4, - 'cracc5' => $card->cracc5, - 'craccnam1' => $card->craccnam1, - 'craccnam2' => $card->craccnam2, - 'craccnam3' => $card->craccnam3, - 'craccnam4' => $card->craccnam4, - 'craccnam5' => $card->craccnam5, - 'crsts' => $card->crsts, - 'cttype' => $card->cttype, - 'ctdesc' => $card->ctdesc, - 'last_update' => $card->lastupdate, - 'crdate' => $card->crdate, - 'branch' => $accountInfo['acctCompany'], - 'currency' => $accountInfo['acctCurrency'], - ] - ); + $cardData = [ + 'branch' => $accountInfo['acctCompany'], + 'currency' => $accountInfo['acctCurrency'], + ]; + + Atmcard::where('crdno', $cardNumber)->update($cardData); + + Log::info("Berhasil memperbarui branch dan currency untuk kartu {$cardNumber}"); } }