*/ use HasFactory, Notifiable, TwoFactorAuthenticatable; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var list */ protected $hidden = [ 'password', 'two_factor_secret', 'two_factor_recovery_codes', 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; } /** * Determine whether new account registration is currently allowed. * * Registration is allowed when: * - the auth.registration_enabled config flag is true, OR * - there are zero users in the database (the first user — usually the * operator setting up the app — can always register) */ public static function registrationAllowed(): bool { if (config('auth.registration_enabled', false)) { return true; } return self::query()->count() === 0; } /** * Determine whether this user is the instance owner (the first user, * usually the operator who installed the app) */ public function isInstanceOwner(): bool { return $this->id === self::query()->min('id'); } /** * Get the user's initials */ public function initials(): string { return Str::of($this->name) ->explode(' ') ->take(2) ->map(fn ($word) => Str::substr($word, 0, 1)) ->implode(''); } /** * Get teams owned by the user */ public function ownedTeams(): HasMany { return $this->hasMany(Team::class, 'owner_id'); } /** * Get teams the user belongs to */ public function teams(): BelongsToMany { return $this->belongsToMany(Team::class) ->withPivot('role') ->withTimestamps(); } /** * Get monitors owned by the user */ public function monitors(): HasMany { return $this->hasMany(Monitor::class); } /** * Get projects owned by the user */ public function projects(): HasMany { return $this->hasMany(Project::class); } /** * Get status pages owned by the user */ public function statusPages(): HasMany { return $this->hasMany(StatusPage::class); } /** * Get the user's notification channels */ public function notificationChannels(): HasMany { return $this->hasMany(NotificationChannel::class); } /** * Get the user's default notification channel */ public function defaultNotificationChannel(): ?NotificationChannel { return $this->notificationChannels() ->where('is_active', true) ->where('is_default', true) ->first(); } protected static function booted(): void { static::created(function (self $user): void { $user->notificationChannels()->create([ 'type' => \App\Enums\NotificationChannelType::Email, 'config' => [], 'is_active' => true, 'is_default' => true, ]); }); } }