|
@@ -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)
|
|
|
]);
|
|
|
}
|
|
|
}
|