Browse Source

Merge branch 'folder-open' into dev

moell 10 months ago
parent
commit
0dbb2cfaf6

+ 39 - 0
app/Http/Controllers/API/FolderController.php

@@ -5,8 +5,10 @@ namespace App\Http\Controllers\API;
 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\FolderDetailResource;
 use App\Models\Enums\FolderObjectType;
+use App\Models\File;
 use App\Models\Folder;
 use App\Models\Library;
 use Illuminate\Http\Request;
@@ -222,4 +224,41 @@ class FolderController extends Controller
 
         return $this->noContent();
     }
+
+    public function open(Request $request)
+    {
+        $folderId = $request->get("id", 0);
+        if ($folderId > 0) {
+            $folder = Folder::query()->findOrFail($folderId);
+            $objectType = $folder->object_type;
+            $objectId = $folder->object_id;
+        } else {
+            $objectType = $request->get("object_type");
+            $objectId = $request->get("object_id");
+        }
+
+        $folderObjectType = FolderObjectType::from($request->object_type);
+
+        $folderObjectType->modelBuilderAllowed()->findOrFail($request->object_id);
+
+        $objectWhere = ['object_type' => $objectType, 'object_id' => $objectId,];
+        $folders = Folder::query()
+            ->where($objectWhere)
+            ->when($folderId, fn($query) => $query->where("parent_id", $folderId))
+            ->when(! $folderId, fn($query) => $query->where("parent_id", 0))
+            ->get(['id', 'name']);
+
+
+        $files = File::query()->where($objectWhere)
+            ->where("folder_id", $folderId)
+            ->where("is_latest_version", 1)
+            ->get();
+
+        return $this->success([
+            'data' => [
+                'folders' => $folders,
+                'files' => FileByObjectResource::collection($files),
+            ]
+        ]);
+    }
 }

+ 33 - 0
database/migrations/2024_04_22_214748_add_folder_id_to_files_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::table('files', function (Blueprint $table) {
+            $table->integer("folder_id")->default(0)->index()->after("title");
+            $table->boolean("is_latest_version")->default(false)->after("version");
+            $table->index(['object_type', 'object_id']);
+            $table->index(['company_id']);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('files', function (Blueprint $table) {
+            $table->dropColumn(['folder_id', 'is_latest_version']);
+            $table->dropIndex(['object_type', 'object_id']);
+            $table->dropColumn(['company_id']);
+        });
+    }
+};

+ 1 - 0
routes/api.php

@@ -137,6 +137,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("folder/{folder}", [API\FolderController::class, "show"])->name("folder.show");
         Route::patch("folder/{folder}", [API\FolderController::class, "update"])->name("folder.update");
         Route::delete("folder/{folder}", [API\FolderController::class, "destroy"])->name("folder.destroy");
+        Route::get("folder-open", [API\FolderController::class, "open"])->name("folder.open");
 
         Route::post("requirement/batch", [API\RequirementController::class, "batchStore"])->name("requirement.batchStore");