*/ use HasFactory, HasMedia, HasUuids; protected $fillable = [ 'account_id', 'user_id', 'name', 'brand_website', 'brand_description', 'brand_tone', 'brand_voice_notes', 'brand_color', 'background_color', 'text_color', 'content_language', ]; protected $appends = ['has_logo', 'logo_url']; public function getHasLogoAttribute(): bool { return $this->getFirstMedia('logo') !== null; } public function getLogoUrlAttribute(): ?string { return $this->getFirstMediaUrl('logo') ?: null; } public function account(): BelongsTo { return $this->belongsTo(Account::class); } 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 hashtags(): HasMany { return $this->hasMany(WorkspaceHashtag::class); } public function labels(): HasMany { return $this->hasMany(WorkspaceLabel::class); } /** * Get invites for this workspace (invites from the same account that include this workspace). * * @return Collection */ public function invites() { return Invite::where('account_id', $this->account_id) ->whereJsonContains('workspaces', $this->id) ->whereNull('accepted_at'); } public function apiTokens(): HasMany { return $this->hasMany(ApiToken::class); } public function hasMember(User $user): bool { return $this->account?->owner_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(); } }