$userId, 'title' => $title, 'message' => $message, 'type' => $type, 'data' => $data, 'is_read' => false, ]); } public static function sendOnce(int $userId, string $title, string $message, string $type = 'info', ?array $data = null): ?NotificationModel { $exists = NotificationModel::where('user_id', $userId) ->where('type', $type) ->where('data->follow_up_id', $data['follow_up_id'] ?? null) ->whereDate('created_at', now()->toDateString()) ->exists(); return $exists ? null : self::send($userId, $title, $message, $type, $data); } public static function notifyAssignment(int $userId, string $leadName): void { self::send($userId, 'لید جدید', "لید {$leadName} به شما اختصاص داده شد", 'assignment'); } public static function notifyFollowUpReminder(int $userId, string $leadName): void { self::send($userId, 'یادآوری پیگیری', "موعد پیگیری لید {$leadName} رسیده است", 'follow_up'); } public static function notifyFeedback(int $userId, string $agentName): void { self::send($userId, 'بازخورد جدید', "بازخورد جدیدی برای شما ثبت شده است", 'feedback'); } public static function notifyReassignment(int $userId, string $leadName): void { self::send($userId, 'تغییر وضعیت لید', "لید {$leadName} دوباره به شما اختصاص داده شد", 'reassignment'); } public static function notifyToAllAgents(string $title, string $message, string $type = 'system'): void { $agents = User::role('agent')->get(); foreach ($agents as $agent) { self::send($agent->id, $title, $message, $type); } } private static function enabled(string $type): bool { if (Setting::where('key', 'in_app_notifications_enabled')->value('value') === 'false') { return false; } return match ($type) { 'assignment', 'reassignment' => Setting::where('key', 'assigned_lead_notification_enabled')->value('value') !== 'false', 'follow_up' => Setting::where('key', 'follow_up_notification_enabled')->value('value') !== 'false', 'overdue_follow_up' => Setting::where('key', 'overdue_notification_enabled')->value('value') !== 'false', default => true, }; } }