'boolean', ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function name(): Attribute { return Attribute::make( get: fn () => $this->original_name ?? '', ); } public function thumbnailPath(): Attribute { return Attribute::make( get: function () { if (!$this->path || Str::contains(pathinfo($this->path, PATHINFO_FILENAME), '.thumbnail')) { return $this->path; } $directory = pathinfo($this->path, PATHINFO_DIRNAME); $filename = pathinfo($this->path, PATHINFO_FILENAME); $extension = pathinfo($this->path, PATHINFO_EXTENSION); $thumbnailName = $filename . '.thumbnail' . ($extension !== '' ? '.' . $extension : ''); return $directory === '.' ? $thumbnailName : $directory . '/' . $thumbnailName; }, ); } public function thumbnailLink(): Attribute { return Attribute::make( get: function () { $thumbnailPath = $this->thumbnail_path; if ($thumbnailPath && Storage::disk('public')->exists($thumbnailPath)) { return url('/storage/' . $thumbnailPath); } return $this->link; }, ); } }