api resource refactoring part 4

This commit is contained in:
Peter Papp
2021-08-27 11:23:17 +02:00
parent d299183ecd
commit 7984ce3ef1
10 changed files with 47 additions and 39 deletions

View File

@@ -8,14 +8,14 @@ class NavigationFolderTreeController
{ {
public function __invoke(): array public function __invoke(): array
{ {
$folders = Folder::with('folders:id,parent_id,id,name') $folders = Folder::with('folders:id,parent_id,id,name,team_folder')
->where('parent_id') ->where('parent_id')
->where('team_folder', false) ->where('team_folder', false)
->where('user_id', Auth::id()) ->where('user_id', Auth::id())
->sortable() ->sortable()
->get(['id', 'parent_id', 'id', 'name']); ->get(['id', 'parent_id', 'id', 'name', 'team_folder']);
$teamFolders = Folder::with('folders:id,parent_id,id,name') $teamFolders = Folder::with('folders:id,parent_id,id,name,team_folder')
->where('parent_id') ->where('parent_id')
->where('team_folder', true) ->where('team_folder', true)
->where('user_id', Auth::id()) ->where('user_id', Auth::id())

View File

@@ -13,7 +13,7 @@ class RenameFileOrFolderAction
public function __invoke( public function __invoke(
RenameItemRequest $request, RenameItemRequest $request,
string $id, string $id,
): FolderResource|FileResource|array { ) {
// Get item // Get item
$item = get_item($request->input('type'), $id); $item = get_item($request->input('type'), $id);
@@ -23,11 +23,6 @@ class RenameFileOrFolderAction
'name' => $request->input('name'), 'name' => $request->input('name'),
]); ]);
if ($request->input('type') === 'folder') { return $item;
return new FolderResource($item);
}
// Return updated item
return new FileResource($item);
} }
} }

View File

@@ -5,7 +5,6 @@ use Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Domain\Files\Resources\FileResource; use Domain\Files\Resources\FileResource;
use Domain\Folders\Resources\FolderResource; use Domain\Folders\Resources\FolderResource;
use Illuminate\Database\Eloquent\Model;
use Domain\Items\Requests\RenameItemRequest; use Domain\Items\Requests\RenameItemRequest;
use Domain\Items\Actions\RenameFileOrFolderAction; use Domain\Items\Actions\RenameFileOrFolderAction;
use Domain\Folders\Actions\UpdateFolderPropertyAction; use Domain\Folders\Actions\UpdateFolderPropertyAction;
@@ -36,7 +35,13 @@ class RenameFileOrFolderController extends Controller
($this->updateFolderProperty)($request, $id); ($this->updateFolderProperty)($request, $id);
} }
// Rename Item $item = ($this->renameFileOrFolder)($request, $id);
return ($this->renameFileOrFolder)($request, $id);
if ($request->input('type') === 'folder') {
return new FolderResource($item);
}
// Return updated item
return new FileResource($item);
} }
} }

View File

@@ -1,6 +1,9 @@
<?php <?php
namespace Domain\Items\Controllers; namespace Domain\Items\Controllers;
use Domain\Files\Resources\FileResource;
use Domain\Folders\Resources\FolderResource;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Domain\Sharing\Models\Share; use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
@@ -62,10 +65,15 @@ class VisitorRenameFileOrFolderController extends Controller
$item = ($this->renameFileOrFolder)($request, $id); $item = ($this->renameFileOrFolder)($request, $id);
// Set public url // Set public url
if ($item->type !== 'folder') { if ($request->input('type') !== 'folder') {
$item->setPublicUrl($shared->token); $item->setPublicUrl($shared->token);
} }
return response($item, 201); if ($request->input('type') === 'folder') {
return response(new FolderResource($item), 201);
}
// Return updated item
return response(new FileResource($item), 201);
} }
} }

View File

@@ -1,12 +1,12 @@
<?php <?php
namespace Domain\Localization\Controllers; namespace Domain\Localization\Controllers;
use Domain\Localization\Resources\LanguageCollection;
use Domain\Localization\Resources\LanguageResource;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Domain\Settings\Models\Setting; use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Domain\Localization\Models\Language; use Domain\Localization\Models\Language;
use Domain\Teams\Resources\LanguageResource;
use Domain\Teams\Resources\LanguageCollection;
use Domain\Localization\Requests\CreateLanguageRequest; use Domain\Localization\Requests\CreateLanguageRequest;
use Domain\Localization\Requests\UpdateLanguageRequest; use Domain\Localization\Requests\UpdateLanguageRequest;

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace Domain\Sharing\Actions; namespace Domain\Sharing\Actions;
use Domain\Sharing\Notifications\SharedSendViaEmail;
use Spatie\QueueableAction\QueueableAction; use Spatie\QueueableAction\QueueableAction;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use Domain\Teams\Notifications\SharedSendViaEmail;
class SendViaEmailAction class SendViaEmailAction
{ {

View File

@@ -2,11 +2,14 @@
namespace Domain\Teams\Controllers; namespace Domain\Teams\Controllers;
use DB; use DB;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection; use Domain\Folders\Resources\FolderCollection;
use Domain\Folders\Resources\FolderResource;
use Domain\Teams\Requests\CreateTeamFolderRequest; use Domain\Teams\Requests\CreateTeamFolderRequest;
use Domain\Teams\Requests\UpdateTeamFolderMembersRequest; use Domain\Teams\Requests\UpdateTeamFolderMembersRequest;
use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Contracts\Routing\ResponseFactory;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
@@ -29,7 +32,7 @@ class TeamFoldersController extends Controller
{ {
$isHomepage = $id === 'undefined'; $isHomepage = $id === 'undefined';
$rootId = $id === 'undefined' ? null : $id; $rootId = $id === 'undefined' ? null : $id;
$requestedFolder = $rootId ? Folder::findOrFail($rootId) : null; $requestedFolder = $rootId ? new FolderResource(Folder::findOrFail($rootId)) : null;
$files = []; $files = [];
$folders = Folder::with([ $folders = Folder::with([
@@ -54,11 +57,9 @@ class TeamFoldersController extends Controller
// Collect folders and files to single array // Collect folders and files to single array
return [ return [
'content' => collect([ 'folders' => new FolderCollection($folders),
new FolderCollection($folders), 'files' => new FilesCollection($files),
$files 'root' => $requestedFolder,
])->collapse(),
'folder' => $requestedFolder,
]; ];
} }

View File

@@ -1,4 +1,5 @@
<?php <?php
namespace Tests\Domain\Browsing; namespace Tests\Domain\Browsing;
use Tests\TestCase; use Tests\TestCase;
@@ -59,8 +60,7 @@ class BrowseTest extends TestCase
->assertStatus(200) ->assertStatus(200)
->assertExactJson([ ->assertExactJson([
[ [
'name' => 'Home', 'name' => 'Files',
'location' => 'base',
'folders' => [ 'folders' => [
[ [
'id' => $folder_level_1->id, 'id' => $folder_level_1->id,
@@ -68,7 +68,7 @@ class BrowseTest extends TestCase
'name' => 'level 1', 'name' => 'level 1',
'items' => 2, 'items' => 2,
'trashed_items' => 2, 'trashed_items' => 2,
'type' => 'folder', 'team_folder' => false,
'folders' => [ 'folders' => [
[ [
'id' => $folder_level_2->id, 'id' => $folder_level_2->id,
@@ -76,7 +76,7 @@ class BrowseTest extends TestCase
'name' => 'level 2', 'name' => 'level 2',
'items' => 1, 'items' => 1,
'trashed_items' => 1, 'trashed_items' => 1,
'type' => 'folder', 'team_folder' => false,
'folders' => [ 'folders' => [
[ [
'id' => $folder_level_3->id, 'id' => $folder_level_3->id,
@@ -91,7 +91,7 @@ class BrowseTest extends TestCase
'updated_at' => $folder_level_3->updated_at->toJson(), 'updated_at' => $folder_level_3->updated_at->toJson(),
'items' => 0, 'items' => 0,
'trashed_items' => 0, 'trashed_items' => 0,
'type' => 'folder', 'team_folder' => false,
'folders' => [], 'folders' => [],
], ],
], ],
@@ -102,13 +102,17 @@ class BrowseTest extends TestCase
'name' => 'level 2 Sibling', 'name' => 'level 2 Sibling',
'items' => 0, 'items' => 0,
'trashed_items' => 0, 'trashed_items' => 0,
'type' => 'folder', 'team_folder' => false,
'folders' => [], 'folders' => [],
], ],
], ],
], ],
], ],
], ],
[
'name' => 'Team Folders',
'folders' => [],
],
]); ]);
} }
@@ -335,7 +339,7 @@ class BrowseTest extends TestCase
$this $this
->actingAs($user) ->actingAs($user)
->getJson('/api/browse/trash') ->getJson('/api/browse/trash/undefined')
->assertStatus(200) ->assertStatus(200)
->assertExactJson([ ->assertExactJson([
[ [

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Tests\Domain\Sharing; namespace Tests\Domain\Sharing;
use Domain\Sharing\Notifications\SharedSendViaEmail;
use Tests\TestCase; use Tests\TestCase;
use App\Users\Models\User; use App\Users\Models\User;
use Laravel\Sanctum\Sanctum; use Laravel\Sanctum\Sanctum;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use Domain\Teams\Notifications\SharedSendViaEmail;
class UserShareTest extends TestCase class UserShareTest extends TestCase
{ {

View File

@@ -24,17 +24,15 @@ class VisitorBrowseTest extends TestCase
->assertExactJson([ ->assertExactJson([
'data' => [ 'data' => [
'id' => $share->id, 'id' => $share->id,
'type' => 'shares', 'type' => 'shared',
'attributes' => [ 'attributes' => [
'permission' => $share->permission, 'permission' => $share->permission,
'is_protected' => false, 'protected' => false,
'item_id' => $share->item_id, 'item_id' => $share->item_id,
'expire_in' => $share->expire_in, 'expire_in' => $share->expire_in,
'token' => $share->token, 'token' => $share->token,
'link' => $share->link, 'link' => $share->link,
'type' => $share->type, 'type' => $share->type,
'created_at' => $share->created_at->toJson(),
'updated_at' => $share->updated_at->toJson(),
], ],
], ],
]); ]);
@@ -292,7 +290,6 @@ class VisitorBrowseTest extends TestCase
'name' => 'level 2', 'name' => 'level 2',
'items' => 1, 'items' => 1,
'trashed_items' => 1, 'trashed_items' => 1,
'type' => 'folder',
'folders' => [ 'folders' => [
[ [
'id' => $folder_level_3->id, 'id' => $folder_level_3->id,
@@ -300,7 +297,6 @@ class VisitorBrowseTest extends TestCase
'name' => 'level 3', 'name' => 'level 3',
'items' => 0, 'items' => 0,
'trashed_items' => 0, 'trashed_items' => 0,
'type' => 'folder',
'folders' => [], 'folders' => [],
], ],
], ],
@@ -311,7 +307,6 @@ class VisitorBrowseTest extends TestCase
'name' => 'level 2 Sibling', 'name' => 'level 2 Sibling',
'items' => 0, 'items' => 0,
'trashed_items' => 0, 'trashed_items' => 0,
'type' => 'folder',
'folders' => [], 'folders' => [],
], ],
], ],