DEV Community

Mr koala
Mr koala

Posted on

stats.vocherrealtime

Fungsi stats.vocherrealtime (yang di dalam kode tertulis sebagai voucherRealtime) adalah bagian dari sistem statistik di dashboard untuk menghitung total pendapatan dari voucher hotspot yang dihasilkan.

Berikut adalah penjelasan teknis mengenai cara kerjanya:


1. Sumber Data (Database)

Data diambil dari tabel billing_history (riwayat pembuatan/penjualan voucher) dan digabungkan (join) dengan tabel hotspot_profile_metadata (pengaturan harga per profil).


2. Logika Perhitungan (Backend)

Perhitungan ini dilakukan di dalam DashboardController.php dengan logika sebagai berikut:

Query SQL
Sistem menjumlahkan (SUM) harga dari semua voucher milik user tersebut.

Penentuan Harga
Menggunakan fungsi:

COALESCE(pm.price, bh.price)
Enter fullscreen mode Exit fullscreen mode

Artinya:

  • Jika ada harga terbaru yang diatur di menu Profile (hotspot_profile_metadata), maka harga itulah yang dipakai.
  • Jika tidak ada, sistem akan menggunakan harga yang tersimpan saat voucher pertama kali dibuat di billing_history.

3. Tampilan di Dashboard (Frontend)

Di file dashboard.blade.php, data ini dikelola menggunakan AlpineJS:

  • Variabel $voucherRealtime dari PHP dikirim ke objek JavaScript stats.
  • Fungsi formatRupiah(stats.voucherRealtime) mengubah angka tersebut menjadi format mata uang IDR.

4. Sinkronisasi Real-time

Meskipun angkanya merupakan total akumulasi, sistem memiliki mekanisme sinkronisasi otomatis:

Broadcasting
Perubahan data (saat voucher baru terjual atau dibuat) dikirim secara instan ke browser menggunakan Laravel Echo (WebSockets) melalui event DashboardStatsUpdated.

Sync Service
Ada layanan MikrotikSyncService yang secara berkala menghitung ulang statistik ini dan menyiarkannya ke dashboard agar angka selalu akurat tanpa perlu refresh halaman.


Ringkasan Alur

Voucher Dibuat → Masuk ke billing_history
Dashboard Update → Menampilkan total nilai rupiah dari seluruh voucher berdasarkan harga profil
WebSocket → Memastikan angka update otomatis di layar tanpa refresh
Enter fullscreen mode Exit fullscreen mode

Top comments (0)