DocumentController.php 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Asset;
  5. use App\Models\Enums\ActionObjectType;
  6. use App\Models\Project;
  7. use App\Services\Folder\FoldersService;
  8. use Illuminate\Http\JsonResponse;
  9. class DocumentController extends Controller
  10. {
  11. public function pathInfo(string $objectType, string $objectId): JsonResponse
  12. {
  13. $data = [
  14. 'type' => null,
  15. 'asset_id' => null,
  16. 'asset_name' => null,
  17. 'project_id' => null,
  18. 'project_name' => null,
  19. 'library_id' => null,
  20. 'library_name' => null,
  21. 'container_id' => null,
  22. 'container_name' => null,
  23. 'folder' => null,
  24. 'object_id' => intval($objectId),
  25. 'object_type' => $objectType,
  26. 'object_name' => '',
  27. ];
  28. $modelEnum = ActionObjectType::from($objectType);
  29. $model = $modelEnum->modelBuilder()->findOrFail($objectId);
  30. $data['object_name'] = $model->{$modelEnum->nameField()};
  31. switch ($objectType) {
  32. case ActionObjectType::CONTAINER_FILE->value:
  33. $data['folder'] = (new FoldersService())->getAllParentTree($model->folder_id);
  34. $data['container_id'] = $model->container?->id;
  35. $data['container_name'] = $model->container?->name;
  36. $data['library_id'] = $model->library?->id;
  37. $data['library_name'] = $model->library?->name;
  38. $data['asset_id'] = $model->library?->asset_id;
  39. $data['project_id'] = $model->library?->project_id;
  40. $data['type'] = $model->library?->type;
  41. break;
  42. case ActionObjectType::FOLDER->value:
  43. $data['folder'] = (new FoldersService())->getAllParentTree($model->id);
  44. $data['container_id'] = $model->container?->id;
  45. $data['container_name'] = $model->container?->name;
  46. $data['library_id'] = $model->library?->id;
  47. $data['library_name'] = $model->library?->name;
  48. $data['asset_id'] = $model->library?->asset_id;
  49. $data['project_id'] = $model->library?->project_id;
  50. $data['type'] = $model->library?->type;
  51. break;
  52. case ActionObjectType::CONTAINER->value:
  53. $data['container_id'] = $model->id;
  54. $data['container_name'] = $model->name;
  55. $data['library_id'] = $model->library?->id;
  56. $data['library_name'] = $model->library?->name;
  57. $data['asset_id'] = $model->library?->asset_id;
  58. $data['project_id'] = $model->library?->project_id;
  59. $data['type'] = $model->library?->type;
  60. break;
  61. case ActionObjectType::LIBRARY->value:
  62. $data['library_id'] = $model->id;
  63. $data['library_name'] = $model->name;
  64. $data['asset_id'] = $model->asset_id;
  65. $data['project_id'] = $model->project_id;
  66. $data['type'] = $model->type;
  67. break;
  68. case ActionObjectType::PROJECT->value:
  69. $data['project_id'] = $model->id;
  70. $data['project_name'] = $model->name;
  71. break;
  72. case ActionObjectType::ASSET->value:
  73. $data['asset_id'] = $model->id;
  74. $data['asset_name'] = $model->name;
  75. break;
  76. default:
  77. break;
  78. }
  79. if ($data['asset_id'] && ! $data['asset_name']) {
  80. $data['asset_name'] = Asset::query()->findOrFail($data['asset_id'])->name;
  81. }
  82. if ($data['project_id'] && ! $data['project_name']) {
  83. $data['project_name'] = Project::query()->findOrFail($data['project_id'])->name;
  84. }
  85. return $this->success(['data' => $data]);
  86. }
  87. }