diff --git a/app/Console/Commands/LarkPushBookingTransactionsModuleCommand.php b/app/Console/Commands/LarkPushBookingTransactionsModuleCommand.php new file mode 100644 index 00000000..4a5577f5 --- /dev/null +++ b/app/Console/Commands/LarkPushBookingTransactionsModuleCommand.php @@ -0,0 +1,114 @@ +error('[Lark ' . $module . '] Missing LARK_BOOKING1_WEBHOOK_ID'); + return self::FAILURE; + } + + print_r(env('APP_ENV')); + + $limit = (int) $this->option('limit'); + $url = "https://hfbbr1an7s0.sg.larksuite.com/base/automation/webhook/event/{$webhookId}"; + $statusM = ApprovalStatus::APPROVAL_STATUS_ID; + $transactionTypeM = TransactionType::ID_TO_NAME; + + $bookingTransactions = BookingTransactions::query() + ->whereNotExists(function ($q) { + $b = new BookingTransactions; + $q->selectRaw(1) + ->from('lark_pushed') + ->whereColumn('lark_pushed.owner_id', 'booking_transactions_view.transaction_id') + ->where('lark_pushed.owner_type', $b->getMorphClass()) + ->where('lark_pushed.is_success', 1); + }) + ->limit($limit) + ->get(); + + if ($bookingTransactions->isEmpty()) { + $this->warn('[Lark ' . $module . '] Nothing to push.'); + return self::SUCCESS; + } + + $this->info("[Lark " . $module . "] Pushing {$bookingTransactions->count()} record(s)..."); + Log::info('[Lark ' . $module . '] Start', ['limit' => $limit, 'env' => app()->environment()]); + + foreach ($bookingTransactions as $b) { + $payload = [ + 'transaction_id' => $b->transaction_id, + 'transaction_type' => $transactionTypeM[$b->transaction_type], + 'transaction_status' => $statusM[$b->transaction_status], + 'booking_id' => $b->booking_id, + 'booking_marking' => $b->booking_marking, + 'company_name' => $b->company_name, + 'company_reference' => $b->company_reference, + 'service_name' => $b->service_name, + 'currency_code' => $b->currency_code, + 'booking_amount' => $b->booking_amount, + 'transaction_created_at' => $b->transaction_created_at, + 'transaction_updated_at' => $b->transaction_updated_at, + 'need_e_invoice' => $b->need_e_invoice, + ]; + + try { + $res = Http::asJson()->post($url, $payload); + $ok = $res->successful() && (int) data_get($res->json(), 'code', -1) === 0; + + LarkPushed::create([ + 'owner_id' => $b->transaction_id, + 'owner_type' => $b->getMorphClass(), + 'is_success' => $ok ? 1 : 0, + ]); + + $trransactionTypeString = $transactionTypeM[$b->transaction_type]; + if ($ok) { + $this->info("[Lark $module]: ✅ Sent: {$b->transaction_id} | {$trransactionTypeString}"); + } else { + $this->error("[Lark $module] Failed {$b->transaction_id} | {$trransactionTypeString}: {$res->status()} {$res->body()}"); + Log::error('[Lark ' . $module . '] Push failed', [ + 'transaction_id' => $b->transaction_id, + 'status' => $res->status(), + 'body' => $res->body(), + ]); + } + } catch (\Throwable $e) { + LarkPushed::create([ + 'owner_id' => $b->transaction_id, + 'owner_type' => $b->getMorphClass(), + 'is_success' => 0, + ]); + $this->error("[Lark $module]: ❌ Exception {$b->id} | {$b->marking}: {$e->getMessage()}"); + Log::error('[Lark ' . $module . '] Exception', [ + 'transaction_id' => $b->transaction_id, + 'exception' => $e->getMessage(), + ]); + } + + sleep(1); + } + + $this->info("[Lark " . $module . "] Finished {$bookingTransactions->count()} record(s)."); + Log::info('[Lark ' . $module . '] Finished', ['count' => $bookingTransactions->count()]); + + return self::SUCCESS; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index cc9f1ff3..a4a12675 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -72,13 +72,13 @@ class Kernel extends ConsoleKernel // ->withoutOverlapping(); // Push company module to Lark - $schedule->command('lark:push-company-module') - ->hourly() - ->withoutOverlapping(); - // Push booking module to Lark - $schedule->command('lark:push-booking-module') - ->hourly() - ->withoutOverlapping(); + // $schedule->command('lark:push-company-module') + // ->hourly() + // ->withoutOverlapping(); + // // Push booking module to Lark + // $schedule->command('lark:push-booking-module') + // ->hourly() + // ->withoutOverlapping(); } } //Commands Version 1: Before Laravel Vapor/AWS diff --git a/app/Models/BookingTransactions.php b/app/Models/BookingTransactions.php new file mode 100644 index 00000000..05424978 --- /dev/null +++ b/app/Models/BookingTransactions.php @@ -0,0 +1,13 @@ +