# Setup Notifikasi Sistem Klasifikasi Tomat ## 🚨 Masalah Saat Ini - Notifikasi menyebabkan 404 karena route tidak ada - Redirect ke halaman yang belum dibuat ## ✅ Solusi Sederhana (SUDAH DIPERBAIKI) - Notifikasi sekarang hanya menampilkan toast "dibaca" - Tidak ada redirect yang menyebabkan 404 - Aman digunakan ## 🎯 Saran Implementasi Lengkap ### 1. Buat Route di `routes/web.php` ```php // Admin Notifications Route::get('/admin/notifications', [NotificationController::class, 'index'])->name('admin.notifications'); Route::get('/admin/classifications', [ClassificationController::class, 'index'])->name('admin.classifications'); Route::get('/admin/uploads', [UploadController::class, 'index'])->name('admin.uploads'); Route::get('/admin/model', [ModelController::class, 'index'])->name('admin.model'); Route::get('/admin/activity', [ActivityController::class, 'index'])->name('admin.activity'); ``` ### 2. Buat Controller ```php // app/Http/Controllers/Admin/NotificationController.php class NotificationController extends Controller { public function index() { $notifications = auth()->user()->notifications()->paginate(20); return view('admin.notifications.index', compact('notifications')); } } ``` ### 3. Buat Database Migration ```php // create_notifications_table Schema::create('notifications', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained(); $table->string('type'); // classification, upload, model, activity $table->string('title'); $table->text('message'); $table->boolean('read')->default(false); $table->timestamps(); }); ``` ### 4. Real-time dengan Pusher/Soketi ```javascript // Echo/Laravel Echo Echo.private('user.' + userId) .notification((notification) => { addNewNotification(notification.type, notification.title, notification.message); }); ``` ### 5. Backend Notification System ```php // Helper function function sendNotification($userId, $type, $title, $message) { $notification = [ 'user_id' => $userId, 'type' => $type, 'title' => $title, 'message' => $message, 'read' => false ]; Notification::create($notification); // Broadcast real-time broadcast(new NewNotification($notification)); } ``` ## 📝 Trigger Points ### Klasifikasi Baru ```php // Di ClassificationController sendNotification( auth()->id(), 'classification', 'Klasifikasi Baru', "$count gambar tomat berhasil diklasifikasikan" ); ``` ### Upload Baru ```php // Di UploadController sendNotification( auth()->id(), 'upload', 'Upload Baru', "$count gambar baru diunggah ke dataset" ); ``` ### Status Model ```php // Di ModelController setelah training sendNotification( auth()->id(), 'model', 'Status Model', "Model berhasil diperbarui dengan akurasi $accuracy%" ); ``` ### Aktivitas Admin ```php // Di ActivityController sendNotification( $adminId, 'activity', 'Aktivitas Admin', $activityDescription ); ``` ## 🔧 Update Layout (Optional) Jika sudah ada route, update JavaScript di `app.blade.php`: ```javascript // Ganti handleNotificationClick function function handleNotificationClick(type) { const routes = { 'classification': '{{ route("admin.classifications") }}', 'upload': '{{ route("admin.uploads") }}', 'model': '{{ route("admin.model") }}', 'activity': '{{ route("admin.activity") }}' }; window.location.href = routes[type] || '{{ route("admin.dashboard") }}'; } ``` ## 📊 Dashboard Widget Tambahkan widget notifikasi di dashboard: ```blade
{{ $notif->title }}
{{ $notif->created_at->diffForHumans() }}