Browse Source

文件和文件夹同级展示和无归属文件写入节点中

moell 10 months ago
parent
commit
cb86b179bc
1 changed files with 28 additions and 15 deletions
  1. 28 15
      app/Http/Controllers/API/FolderController.php

+ 28 - 15
app/Http/Controllers/API/FolderController.php

@@ -12,6 +12,7 @@ use App\Models\Enums\FolderObjectType;
 use App\Models\File;
 use App\Models\Folder;
 use App\Models\Library;
+use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -285,9 +286,11 @@ class FolderController extends Controller
 
         $folders = Folder::query()->with(['files'])->where($objectWhere)->get(['id', 'name', 'parent_id']);
 
-        $fileResourceFunction = function (File $file) {
+        $fileResourceFunction = function (File $file, $parentId, bool $isChildrenFile) {
             return [
-                'id' => $file->id,
+                'id' => sprintf($isChildrenFile ? "children_%s" : "file_%s", $file->id),
+                'node_id' => $file->id,
+                'parent_id' => $parentId,
                 'title' => $file->title,
                 'extension' => $file->extension,
                 'size' => $file->size,
@@ -302,31 +305,41 @@ class FolderController extends Controller
             ];
         };
 
-        $folderItems = [];
-        foreach ($folders as &$folder) {
-            $files  = [];
-            foreach ($folder->files->groupBy("title") as $fileItems) {
-                $item = $fileResourceFunction($fileItems->first());
-                $item['children'] = [];
+        $nodes = [];
+
+        $filesFormat = function(Collection $files, $firstId) use (&$nodes, $fileResourceFunction) {
+            foreach ($files->groupBy("title") as $fileItems) {
+                $item = $fileResourceFunction($fileItems->first(), $firstId, false);
+                $nodes[] = $item;
 
                 foreach ($fileItems as $fileItem) {
-                    $item['children'][] = $fileResourceFunction($fileItem);
+                    $nodes[] = $fileResourceFunction($fileItem, $item['id'], true);
                 }
-
-                $files[] = $item;
             }
-
-            $folderItems[] = [
+        };
+        foreach ($folders as &$folder) {
+            $nodes[] = [
                 'id' => $folder->id,
+                'node_id' => $folder->id,
                 'name' => $folder->name,
                 'parent_id' => $folder->parent_id,
                 'type' => 'folder',
-                'files' => $files,
             ];
+
+            $filesFormat($folder->files, $folder->id);
         }
 
+        $topFiles = File::query()->where($objectWhere)
+            ->where("source", 1)
+            ->where("folder_id", 0)
+            ->orderByDesc("version")
+            ->get();
+
+        $filesFormat($topFiles, 0);
+
+
         return $this->success([
-            'data' => make_tree($folderItems)
+            'data' => make_tree($nodes)
         ]);
     }
 }