*/ use HasFactory, Notifiable, UsesStringIds; public const CREATED_AT = 'createdAt'; public const UPDATED_AT = 'updatedAt'; protected $table = 'User'; protected $keyType = 'string'; public $incrementing = false; protected $fillable = [ 'name', 'email', 'phone', 'passwordHash', 'isSuperAdmin', ]; protected $hidden = ['passwordHash', 'remember_token']; public function getAuthPasswordName(): string { return 'passwordHash'; } public function getAuthPassword(): ?string { return $this->passwordHash; } /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'emailVerified' => 'datetime', 'phoneVerified' => 'datetime', 'isSuperAdmin' => 'boolean', ]; } public function customerProfiles(): HasMany { return $this->hasMany(CustomerProfile::class, 'userId'); } public function staffProfiles(): HasMany { return $this->hasMany(StaffProfile::class, 'userId'); } public function receivedNotifications(): UserHasMany { return $this->hasMany(Notification::class, 'recipientUserId'); } public function notificationPreferences(): UserHasMany { return $this->hasMany(NotificationPreference::class, 'userId'); } public function pushSubscriptions(): UserHasMany { return $this->hasMany(PushSubscription::class, 'userId'); } public function uploadedMediaAssets(): UserHasMany { return $this->hasMany(MediaAsset::class, 'uploadedByUserId'); } public function sentStaffInvitations(): UserHasMany { return $this->hasMany(StaffInvitation::class, 'invitedByUserId'); } }