# Product Badge System ## Overview Sistem badge produk yang menampilkan label dinamis pada setiap produk berdasarkan kondisi tertentu. Hanya 1 badge yang ditampilkan per produk sesuai dengan prioritas yang telah ditentukan. ## Prioritas Badge Badge ditampilkan berdasarkan prioritas berikut (dari tertinggi ke terendah): ### 1. **Terlaris** (Prioritas Tertinggi) - **Kondisi**: Produk memiliki penjualan ≥ 500 unit dalam 1 bulan terakhir - **Warna**: Merah (`bg-red-500 text-white`) - **Label**: "Terlaris" ### 2. **Baru** - **Kondisi**: Produk dibuat dalam 1 bulan terakhir - **Warna**: Primary (`bg-home-primary text-white`) - **Label**: "Baru" ### 3. **Hot** (Prioritas Terendah) - **Kondisi**: Produk memiliki views > 100 - **Warna**: Oranye (`bg-orange-500 text-white`) - **Label**: "Hot" ## Implementasi ### Database Migration Kolom `view` telah ditambahkan ke tabel: - `perfumes` - `bottles` - `products` File migration: `2025_12_26_001500_add_view_column_to_product_tables.php` ### Backend Logic File: `app/Livewire/Home/Product/Index.php` #### Method `render()` - Menambahkan `withCount` untuk menghitung total penjualan dalam 1 bulan terakhir - Memanggil method `determineBadge()` untuk setiap produk #### Method `determineBadge()` ```php private function determineBadge($product): ?array { // Priority 1: Baru (created within last month) if ($product->created_at && $product->created_at->isAfter(now()->subMonth())) { return [ 'label' => 'Baru', 'class' => 'bg-blue-500 text-white', ]; } // Priority 2: Terlaris (sales >= 500 in last month) if (isset($product->total_sales) && $product->total_sales >= 500) { return [ 'label' => 'Terlaris', 'class' => 'bg-red-500 text-white', ]; } // Priority 3: Hot (high views - > 100 views) if (isset($product->view) && $product->view > 100) { return [ 'label' => 'Hot', 'class' => 'bg-orange-500 text-white', ]; } return null; } ``` ### Frontend Display File: `resources/views/livewire/home/product/index.blade.php` Badge ditampilkan secara kondisional: ```blade @if (isset($product->badge) && $product->badge) {{ $product->badge['label'] }} @endif ``` ## Kustomisasi ### Mengubah Threshold Anda dapat mengubah nilai threshold di method `determineBadge()`: - **Baru**: Ubah `now()->subMonth()` menjadi periode lain (misal: `now()->subWeeks(2)`) - **Terlaris**: Ubah `>= 500` menjadi nilai lain - **Hot**: Ubah `> 100` menjadi nilai lain ### Menambah Badge Baru Tambahkan kondisi baru di method `determineBadge()` dengan memperhatikan prioritas: ```php // Priority 4: Diskon (contoh) if (isset($product->discount) && $product->discount > 0) { return [ 'label' => 'Diskon', 'class' => 'bg-green-500 text-white', ]; } ``` ### Mengubah Warna Badge Ubah class Tailwind di array return: ```php return [ 'label' => 'Baru', 'class' => 'bg-purple-500 text-white', // Ganti warna di sini ]; ``` ## Tracking View Count Untuk meningkatkan view count produk, tambahkan logika di halaman detail produk: ```php // Di controller/livewire detail produk $product->increment('view'); ``` ## Notes - Badge hanya ditampilkan jika kondisi terpenuhi - Jika tidak ada kondisi yang terpenuhi, tidak ada badge yang ditampilkan - Sistem menggunakan prioritas, jadi jika produk memenuhi multiple kondisi, hanya badge dengan prioritas tertinggi yang ditampilkan