*/ protected function casts(): array { return [ 'reason' => EmailSuppressionReason::class, 'first_bounced_at' => 'datetime', 'last_bounced_at' => 'datetime', 'suppressed_at' => 'datetime', 'released_at' => 'datetime', ]; } /** * @return BelongsTo */ public function releasedBy(): BelongsTo { return $this->belongsTo(User::class, 'released_by_user_id'); } /** * Gesperrt heißt: gesetzt und nicht freigegeben. Eine Freigabe hebt die * Sperre auf; ein späterer Bounce setzt `suppressed_at` neu und löscht * die Freigabe wieder — der Verlauf steht im Aktivitätslog. */ public function isActive(): bool { return $this->suppressed_at !== null && $this->released_at === null; } /** * @param Builder $query * @return Builder */ public function scopeActive(Builder $query): Builder { return $query->whereNotNull('suppressed_at')->whereNull('released_at'); } }