*/ use HasFactory, HasMedia, HasUuids; protected $fillable = [ 'user_id', 'name', 'timezone', ]; protected $appends = ['logo']; /** * @return array{url: string, media_id: string|null} */ public function getLogoAttribute(): array { $media = $this->getFirstMedia('logo'); return [ 'url' => $media?->url ?? $this->getFallbackAvatarUrl($this->name), 'media_id' => $media?->id, ]; } public function owner(): BelongsTo { return $this->belongsTo(User::class, 'user_id'); } public function members(): BelongsToMany { return $this->belongsToMany(User::class) ->withPivot('role') ->withTimestamps(); } public function socialAccounts(): HasMany { return $this->hasMany(SocialAccount::class); } public function posts(): HasMany { return $this->hasMany(Post::class); } public function invites(): HasMany { return $this->hasMany(WorkspaceInvite::class); } public function pendingInvites(): HasMany { return $this->invites()->pending(); } public function hashtags(): HasMany { return $this->hasMany(WorkspaceHashtag::class); } public function labels(): HasMany { return $this->hasMany(WorkspaceLabel::class); } public function hasMember(User $user): bool { return $this->user_id === $user->id || $this->members()->where('user_id', $user->id)->exists(); } public function hasConnectedPlatform(string $platform): bool { return $this->socialAccounts()->where('platform', $platform)->exists(); } public function getSocialAccount(string $platform): ?SocialAccount { return $this->socialAccounts()->where('platform', $platform)->first(); } }