*/ use HasFactory, HasUuids; protected $fillable = [ 'workspace_id', 'endpoint', 'events', 'status', 'signing_secret', 'consecutive_failures', 'paused_at', 'last_sent_at', ]; protected $hidden = [ 'signing_secret', ]; protected $attributes = [ 'consecutive_failures' => 0, ]; protected function casts(): array { return [ 'events' => 'array', 'status' => Status::class, 'signing_secret' => 'encrypted', 'paused_at' => 'datetime', 'last_sent_at' => 'datetime', ]; } public static function generateSigningSecret(): string { return 'whsec_'.Str::random(32); } public function pause(): void { $this->update([ 'status' => Status::Paused, 'paused_at' => now(), ]); } public function resetConsecutiveFailures(): void { if ($this->consecutive_failures > 0) { $this->update(['consecutive_failures' => 0]); } } /** * @param Builder $query * @return Builder */ public function scopeEnabled(Builder $query): Builder { return $query->where('status', Status::Enabled); } public function workspace(): BelongsTo { return $this->belongsTo(Workspace::class); } public function logs(): HasMany { return $this->hasMany(WebhookLog::class); } }