subDay(); $reminders = Reminder::with(['user', 'packageName'])->where(function ($query) use ($now) { $query->where('repeatable', false) ->where('time', '<=', $now) ->whereNull('last_repeat'); }) ->orWhere(function ($query) use ($now, $yesterday) { $query->where('repeatable', true) ->where('time', '<=', $now) ->where(function ($sub) use ($now, $yesterday) { $sub->whereNull('last_repeat') ->orWhere('last_repeat', '<=', $yesterday); }); }) ->get(); if ($reminders->isEmpty()) { $this->info('No reminders due at this time.'); return Command::SUCCESS; } foreach ($reminders as $reminder) { $user = $reminder->user; $packageName = $reminder->packageName; if ($reminder->last_repeat?->addDays($reminder->repeat_days)->isFuture()) { continue; } SendPushJob::dispatch( user: $user, title: $reminder->title, packageName: $packageName, description: $reminder->description ?? '', data: $reminder->data ?? [] ); $reminder->last_repeat = $now; $reminder->save(); $this->info("Queued push notification for reminder {$reminder->id}."); } return Command::SUCCESS; } }