Files
trackbugs/app/Notifications/EventSpikeNotification.php
T

64 lines
1.8 KiB
PHP
Raw Normal View History

2026-03-19 19:47:06 +02:00
<?php
namespace App\Notifications;
use App\Models\Issue;
use App\Models\Project;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class EventSpikeNotification extends Notification implements ShouldQueue
{
use Queueable;
public function __construct(
public Project $project,
public Issue $issue,
public int $eventCount,
public int $windowMinutes,
) {}
public function via(object $notifiable): array
{
$pref = $notifiable->notificationPreferenceFor($this->project);
$channels = [];
if ($pref->database_enabled) {
$channels[] = 'database';
}
if ($pref->email_enabled) {
$channels[] = 'mail';
}
return $channels;
}
public function toMail(object $notifiable): MailMessage
{
$url = route('projects.issues.show', [$this->project, $this->issue]);
return (new MailMessage)
->subject("[{$this->project->name}] Spike: {$this->eventCount} events in {$this->windowMinutes}m")
->greeting("Event spike in {$this->project->name}")
->line("{$this->eventCount} events received in the last {$this->windowMinutes} minutes for:")
->line($this->issue->title)
->action('View Issue', $url);
}
public function toArray(object $notifiable): array
{
return [
'type' => 'spike',
'project_id' => $this->project->id,
'project_name' => $this->project->name,
'issue_id' => $this->issue->id,
'issue_title' => $this->issue->title,
'event_count' => $this->eventCount,
'window_minutes' => $this->windowMinutes,
];
}
}