MediaDiskEnum::class, ]; public function getFullUrlAttribute() { if ($this->disk === MediaDiskEnum::Public) { return Storage::disk('public')->path($this->path); }elseif($this->disk === MediaDiskEnum::Private){ return Storage::disk('private')->path($this->path); } return $this->url ?? null; } public function getStorageDisk() { return Storage::disk($this->disk?->value ?? 'public'); } public function exists() { return $this->getStorageDisk()->exists($this->path); } public function getContents() { return $this->getStorageDisk()->get($this->path); } public function deleteFile() { if ($this->exists()) { return $this->getStorageDisk()->delete($this->path); } return false; } public function getHumanSizeAttribute() { $bytes = $this->size; $units = ['B', 'KB', 'MB', 'GB', 'TB']; for ($i = 0; $bytes > 1024 && $i < count($units) - 1; $i++) { $bytes /= 1024; } return round($bytes, 2) . ' ' . $units[$i]; } public function isPublic() { return $this->disk === MediaDiskEnum::Public; } public function isPrivate() { return $this->disk === MediaDiskEnum::Private; } public function assignments() { return $this->hasMany(MediaAssignment::class , 'media_id' , 'id'); } public function reports() { return $this->morphedByMany( \App\Models\Report::class, 'mediable', 'media_assignments', 'media_id', 'mediable_id' ); } public function documents() { return $this->morphedByMany( \App\Models\Document::class, 'mediable', 'media_assignments', 'media_id', 'mediable_id' ); } public function users() { return $this->hasMany(User::class , 'media_id' , 'id'); } }