FileHideService.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Services\File;
  3. use App\Models\Container;
  4. use App\Models\ContainerContent;
  5. use App\Models\Enums\FileObjectType;
  6. use App\Models\File;
  7. use Illuminate\Support\Facades\Auth;
  8. class FileHideService
  9. {
  10. public function hide(string $id)
  11. {
  12. $file = File::query()->findOrFail($id);
  13. if ($file->is_hide) {
  14. return;
  15. }
  16. $fileObjectType = FileObjectType::from($file->object_type);
  17. $object = $fileObjectType->modelBuilderAllowed($file->object_id)->find($file->object_id);
  18. throw_validation_if(! $object, sprintf("File ID: %s, no permission to access", $file->id));
  19. $objectVersion = $this->getObjectVersion($fileObjectType, $object);
  20. if ($file->is_latest_version === 0) {
  21. $file->is_hide = 1;
  22. $file->hide_object_version = $objectVersion;
  23. $file->save();
  24. } else {
  25. File::query()
  26. ->where("folder_id", $file->folder_id)
  27. ->where('title',$file->title)
  28. ->where('object_type',$file->object_type)
  29. ->where("object_id", $file->object_id)
  30. ->where("is_hide", 0)
  31. ->update([
  32. 'is_hide' => 1,
  33. 'hide_object_version' => $objectVersion
  34. ]);
  35. }
  36. match ($fileObjectType) {
  37. FileObjectType::CONTAINER => $this->refreshContainerVersion($object),
  38. default => null
  39. };
  40. }
  41. protected function getObjectVersion(FileObjectType $fileObjectType, $object)
  42. {
  43. return match ($fileObjectType) {
  44. FileObjectType::CONTAINER => $object->version + 1,
  45. default => 0
  46. };
  47. }
  48. protected function refreshContainerVersion(Container $container)
  49. {
  50. $version = $container->version;
  51. $container->version++;
  52. $container->save();
  53. ContainerContent::query()->create([
  54. ...$container->content($version)->first()->toArray(),
  55. 'created_by' => Auth::id(),
  56. 'version' => $container->version,
  57. ]);
  58. }
  59. }