with(['user']) ->orderBy('created_at', 'desc') ->get(); } public function findById(int $id): ?Media { return Media::with(['user'])->find($id); } public function create(array $data): Media { return Media::create($data); } public function update(int $id, array $data): ?Media { $model = $this->findById($id); if (! $model) { return null; } $model->update($data); return $model->fresh(['user']); } public function delete(int $id): bool { $model = $this->findById($id); if (! $model) { return false; } return $model->delete(); } public function createFromFile(UploadedFile $file, string $folder, string $source, int $sourceId, ?string $filename = null): Media { $path = $this->uploadFile($file, $folder, $filename); return Media::create([ 'source' => $source, 'source_id' => $sourceId, 'name' => $file->getClientOriginalName(), 'path' => $path, ]); } public function replaceFile(UploadedFile $newFile, string $folder, string $source, int $sourceId, ?Media $old = null, ?string $filename = null): Media { if ($old) { $this->removeArchiveByPath($old->path); $old->delete(); } return $this->createFromFile($newFile, $folder, $source, $sourceId, $filename); } }