findOrFail($id); if ($file->is_hide) { return; } $fileObjectType = FileObjectType::from($file->object_type); $object = $fileObjectType->modelBuilderAllowed($file->object_id)->find($file->object_id); throw_validation_if(! $object, sprintf("File ID: %s, no permission to access", $file->id)); $objectVersion = $this->getObjectVersion($fileObjectType, $object); if ($file->is_latest_version === 0) { $file->is_hide = 1; $file->hide_object_version = $objectVersion; $file->save(); } else { File::query() ->where("folder_id", $file->folder_id) ->where('title',$file->title) ->where('object_type',$file->object_type) ->where("object_id", $file->object_id) ->where("is_hide", 0) ->update([ 'is_hide' => 1, 'hide_object_version' => $objectVersion ]); } match ($fileObjectType) { FileObjectType::CONTAINER => $this->refreshContainerVersion($object), default => null }; } protected function getObjectVersion(FileObjectType $fileObjectType, $object) { return match ($fileObjectType) { FileObjectType::CONTAINER => $object->version + 1, default => 0 }; } protected function refreshContainerVersion(Container $container) { $version = $container->version; $container->version++; $container->save(); ContainerContent::query()->create([ ...$container->content($version)->first()->toArray(), 'created_by' => Auth::id(), 'version' => $container->version, ]); } }