|
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
|
|
|
use App\Http\Requests\API\Folder\CreateRequest;
|
|
|
use App\Http\Requests\API\Folder\UpdateRequest;
|
|
|
use App\Http\Resources\API\FileByObjectResource;
|
|
|
+use App\Http\Resources\API\FileVersioTreeByObjectResource;
|
|
|
use App\Http\Resources\API\FolderDetailResource;
|
|
|
use App\Models\Enums\FolderObjectType;
|
|
|
use App\Models\File;
|
|
@@ -266,4 +267,66 @@ class FolderController extends Controller
|
|
|
]
|
|
|
]);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 基于类型的文件夹、文件版本树
|
|
|
+ *
|
|
|
+ * @param string $objectType
|
|
|
+ * @param string $objectId
|
|
|
+ * @return \Illuminate\Http\JsonResponse
|
|
|
+ */
|
|
|
+ public function versionFileTreeByObject(string $objectType, string $objectId)
|
|
|
+ {
|
|
|
+ $folderObjectType = FolderObjectType::from($objectType);
|
|
|
+
|
|
|
+ $folderObjectType->modelBuilderAllowed()->findOrFail($objectId);
|
|
|
+
|
|
|
+ $objectWhere = ['object_type' => $objectType, 'object_id' => $objectId,];
|
|
|
+
|
|
|
+ $folders = Folder::query()->with(['files'])->where($objectWhere)->get(['id', 'name', 'parent_id']);
|
|
|
+
|
|
|
+ $fileResourceFunction = function (File $file) {
|
|
|
+ return [
|
|
|
+ 'id' => $file->id,
|
|
|
+ 'title' => $file->title,
|
|
|
+ 'extension' => $file->extension,
|
|
|
+ 'size' => $file->size,
|
|
|
+ 'created_by' => $file->createdBy ? [
|
|
|
+ 'id' => $file->createdBy->id,
|
|
|
+ 'name' => $file->createdBy->name,
|
|
|
+ 'username' => $file->createdBy->username,
|
|
|
+ ] : [],
|
|
|
+ 'created_at' => (string)$file->created_at,
|
|
|
+ 'version' => $file->version,
|
|
|
+ 'type' => 'file'
|
|
|
+ ];
|
|
|
+ };
|
|
|
+
|
|
|
+ $folderItems = [];
|
|
|
+ foreach ($folders as &$folder) {
|
|
|
+ $files = [];
|
|
|
+ foreach ($folder->files->groupBy("title") as $fileItems) {
|
|
|
+ $item = $fileResourceFunction($fileItems->first());
|
|
|
+ $item['children'] = [];
|
|
|
+
|
|
|
+ foreach ($fileItems as $fileItem) {
|
|
|
+ $item['children'][] = $fileResourceFunction($fileItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ $files[] = $item;
|
|
|
+ }
|
|
|
+
|
|
|
+ $folderItems[] = [
|
|
|
+ 'id' => $folder->id,
|
|
|
+ 'name' => $folder->name,
|
|
|
+ 'parent_id' => $folder->parent_id,
|
|
|
+ 'type' => 'folder',
|
|
|
+ 'files' => $files,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $this->success([
|
|
|
+ 'data' => make_tree($folderItems)
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|