added request validators

This commit is contained in:
Peter Papp
2021-08-25 17:53:15 +02:00
parent 8282defbe3
commit 7020720392
10 changed files with 128 additions and 23 deletions

View File

@@ -6,7 +6,7 @@ use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Domain\Subscriptions\Services\StripeService;
use Domain\Subscriptions\Requests\StoreUpgradeAccountRequest;
use Domain\Teams\Requests\StoreUpgradeAccountRequest;
/**
* Upgrade account to subscription

View File

@@ -9,18 +9,23 @@ use Illuminate\Support\Facades\Auth;
class BrowseSharedWithMeController
{
public function __invoke($id)
public function __invoke($id): array
{
$rootId = Str::isUuid($id) ? $id : null;
$requestedFolder = Str::isUuid($id) ? Folder::findOrFail($rootId) : null;
$relations = [
'parent:id,name',
'shared:token,id,item_id,permission,is_protected,expire_in'
];
if ($rootId) {
$folders = Folder::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
$folders = Folder::with($relations)
->where('id', $id)
->sortable()
->get();
$files = File::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
$files = File::with($relations)
->where('folder_id', $id)
->sortable()
->get();
@@ -31,7 +36,7 @@ class BrowseSharedWithMeController
->where('user_id', Auth::id())
->pluck('folder_id');
$folders = Folder::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
$folders = Folder::with($relations)
->whereIn('id', $folderIds)
->sortable()
->get();

View File

@@ -1,7 +1,8 @@
<?php
namespace Domain\Teams\Controllers;
use Illuminate\Http\Request;
use Domain\Teams\Requests\ConvertIntoTeamFolderRequest;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
@@ -15,16 +16,16 @@ class ConvertFolderIntoTeamFolderController extends Controller
}
public function __invoke(
Request $request,
ConvertIntoTeamFolderRequest $request,
Folder $folder
): Response {
): ResponseFactory|Response {
$folder->update([
'team_folder' => 1,
'parent_id' => null,
]);
// Invite team members
($this->inviteMembers)($request->input('members'), $folder);
($this->inviteMembers)($request->input('invitations'), $folder);
return response($folder, 201);
}

View File

@@ -6,12 +6,15 @@ use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Domain\Teams\Models\TeamFolderInvitation;
use Illuminate\Contracts\Routing\ResponseFactory;
class InvitationsController extends Controller
{
public function update(
TeamFolderInvitation $invitation
): Response {
): ResponseFactory|Response {
$user = User::where('email', $invitation->email)
->firstOrFail();
@@ -31,7 +34,7 @@ class InvitationsController extends Controller
public function destroy(
TeamFolderInvitation $invitation
): Response {
): ResponseFactory|Response {
$invitation->update([
'status' => 'rejected',
]);

View File

@@ -2,7 +2,9 @@
namespace Domain\Teams\Controllers;
use DB;
use Illuminate\Http\Request;
use Domain\Teams\Requests\CreateTeamFolderRequest;
use Domain\Teams\Requests\UpdateTeamFolderMembersRequest;
use Illuminate\Contracts\Routing\ResponseFactory;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
@@ -47,8 +49,8 @@ class TeamFoldersController extends Controller
}
public function store(
Request $request,
): Response {
CreateTeamFolderRequest $request,
): ResponseFactory|Response {
$data = CreateTeamFolderData::fromRequest($request);
$folder = Folder::create([
@@ -58,17 +60,17 @@ class TeamFoldersController extends Controller
]);
// Invite team members
($this->inviteMembers)($data->members, $folder);
($this->inviteMembers)($data->invitations, $folder);
return response($folder, 201);
}
public function update(
Request $request,
UpdateTeamFolderMembersRequest $request,
Folder $folder,
UpdateInvitationsAction $updateInvitations,
UpdateMembersAction $updateMembers,
): Response {
): ResponseFactory|Response {
$updateInvitations(
$folder,
$request->input('invitations')
@@ -82,7 +84,7 @@ class TeamFoldersController extends Controller
return response('Done', 201);
}
public function destroy(Folder $folder): Response
public function destroy(Folder $folder): ResponseFactory|Response
{
// Delete existing invitations
DB::table('team_folder_invitations')

View File

@@ -1,4 +1,5 @@
<?php
namespace Domain\Teams\DTO;
use Spatie\DataTransferObject\DataTransferObject;
@@ -6,13 +7,13 @@ use Spatie\DataTransferObject\DataTransferObject;
class CreateTeamFolderData extends DataTransferObject
{
public string $name;
public array $members;
public array $invitations;
public static function fromRequest($request): self
{
return new self([
'name' => $request->input('name'),
'members' => $request->input('members'),
'name' => $request->input('name'),
'invitations' => $request->input('invitations'),
]);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Domain\Teams\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ConvertIntoTeamFolderRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'invitations' => 'required|array',
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace Domain\Teams\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreateTeamFolderRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string',
'invitations' => 'required|array',
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace Domain\Teams\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateTeamFolderMembersRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'members' => 'present|array',
'invitations' => 'present|array',
];
}
}

View File

@@ -29,7 +29,7 @@ class TeamsTest extends TestCase
->actingAs($user)
->post('/api/teams/folders', [
'name' => 'Company Project',
'members' => [
'invitations' => [
[
'email' => 'john@internal.com',
'permission' => 'can-edit',
@@ -76,7 +76,7 @@ class TeamsTest extends TestCase
$this
->actingAs($user)
->post("/api/teams/convert/{$folder->id}", [
'members' => [
'invitations' => [
[
'email' => 'john@internal.com',
'permission' => 'can-edit',
@@ -484,6 +484,7 @@ class TeamsTest extends TestCase
'permission' => 'can-view',
],
],
'invitations' => [],
])
->assertCreated();