'array', 'recipients' => 'array', ]; } /** * Log a notification. */ public static function log( string $type, string $subject, string $message, array $recipients, string $status = 'sent', ?array $context = null, ?string $error = null ): self { return self::create([ 'type' => $type, 'subject' => $subject, 'message' => $message, 'recipients' => $recipients, 'status' => $status, 'context' => $context, 'error' => $error, ]); } /** * Get human-readable type label. */ public function getTypeLabelAttribute(): string { return match ($this->type) { 'ssl_errors' => __('SSL Certificate'), 'backup_failures' => __('Backup'), 'disk_quota' => __('Disk Quota'), 'login_failures' => __('Login Failure'), 'ssh_logins' => __('SSH Login'), 'system_updates' => __('System Updates'), 'service_health' => __('Service Health'), 'high_load' => __('High Load'), 'test' => __('Test'), default => ucfirst(str_replace('_', ' ', $this->type)), }; } /** * Scope to get logs from the last N days. */ public function scopeLastDays($query, int $days = 30) { return $query->where('created_at', '>=', now()->subDays($days)); } /** * Clean up old logs. */ public static function cleanup(int $daysToKeep = 30): int { return self::where('created_at', '<', now()->subDays($daysToKeep))->delete(); } }