'datetime', 'sent_at' => 'datetime', 'payload' => 'array', ]; public function workspace(): BelongsTo { return $this->belongsTo(Workspace::class); } public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class); } public function rule(): BelongsTo { return $this->belongsTo(AlertRule::class, 'alert_rule_id'); } public function destination(): BelongsTo { return $this->belongsTo(AlertDestination::class, 'alert_destination_id'); } public function prunable(): Builder { $retentionDays = (int) config('tenantpilot.alerts.delivery_retention_days', 90); $retentionDays = max(1, $retentionDays); return static::query()->where('created_at', '<', now()->subDays($retentionDays)); } public function isTerminal(): bool { return in_array($this->status, [ self::STATUS_SENT, self::STATUS_FAILED, self::STATUS_SUPPRESSED, self::STATUS_CANCELED, ], true); } }