File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Jobs/Notifications/ClearAllNotificationJob.php
<?php
namespace App\Jobs\Notifications;
use App\Http\Controllers\PushNotificationController;
use App\Notification;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class ClearAllNotificationJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$now = Carbon::now();
$appId = config('onesignal.app_id');
$push = new PushNotificationController();
// Eliminar notificaciones lógicas
$count = 0;
Notification::onlyTrashed()
->where('deleted_at', '<', $now)
->whereNotNull('reference_onesignal_notification_id')
->orderBy('id')
->chunkById(1000, function ($notifications) use (&$push, &$appId, &$count) {
foreach ($notifications as $notification) {
$onesignalId = $notification->reference_onesignal_notification_id;
try {
$push->cancelNotification($onesignalId, $appId, 'U');
} catch (\Throwable $e) {
Log::warning("Error al cancelar notificación OneSignal {$onesignalId}: " . $e->getMessage());
}
}
$count += $notifications->count();
});
Log::info("Se han eliminado {$count} notificaciones.");
}
}