1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- namespace App\Services\File;
- use App\Models\Container;
- use App\Models\ContainerContent;
- use App\Models\Enums\FileObjectType;
- use App\Models\File;
- use Illuminate\Support\Facades\Auth;
- class FileHideService
- {
- public function hide(string $id)
- {
- $file = File::query()->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,
- ]);
- }
- }
|