create share api update

This commit is contained in:
Čarodej
2022-05-03 09:57:56 +02:00
parent b1fd046084
commit 664f8d8e53
6 changed files with 82 additions and 47 deletions

View File

@@ -6,8 +6,6 @@ use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Domain\Sharing\Resources\ShareResource;
use Domain\Sharing\Actions\SendViaEmailAction;
use Domain\Sharing\Requests\CreateShareRequest;
use Domain\Sharing\Requests\UpdateShareRequest;
class ShareController extends Controller
@@ -21,40 +19,6 @@ class ShareController extends Controller
return new ShareResource($share);
}
/**
* Generate file share link
*/
public function store(
CreateShareRequest $request,
SendViaEmailAction $sendLinkToEmailAction,
): Response {
$item = get_item($request->input('type'), $request->input('id'));
$this->authorize('owner', $item);
$shared = Share::create([
'password' => $request->has('password') ? bcrypt($request->input('password')) : null,
'type' => $request->input('type') === 'folder' ? 'folder' : 'file',
'is_protected' => $request->input('isPassword'),
'permission' => $request->input('permission') ?? null,
'expire_in' => $request->input('expiration') ?? null,
'item_id' => $request->input('id'),
'user_id' => Auth::id(),
]);
// Send shared link via email
if ($request->has('emails')) {
$sendLinkToEmailAction->onQueue()->execute(
emails: $request->input('emails'),
token: $shared->token,
user: $shared->user,
);
}
// Return created shared record
return response(new ShareResource($shared), 201);
}
/**
* Update sharing
*/

View File

@@ -0,0 +1,68 @@
<?php
namespace Domain\Sharing\Controllers;
use App\Http\Controllers\Controller;
use Domain\Folders\Models\Folder;
use Domain\Sharing\Actions\SendViaEmailAction;
use Domain\Sharing\Models\Share;
use Domain\Sharing\Requests\CreateShareRequest;
use Domain\Sharing\Resources\ShareResource;
use Illuminate\Http\JsonResponse;
class ShareItemController extends Controller
{
public function __construct(
public SendViaEmailAction $sendLinkToEmailAction,
) {}
/**
* Generate file share link
*/
public function __invoke(
CreateShareRequest $request,
string $id,
): JsonResponse {
$item = get_item($request->input('type'), $id);
// Check if item is currently shared
if ($item->shared()->exists()) {
return response()->json([
'type' => 'error',
'message' => 'The item is currently shared.',
], 422);
}
// If sharing folder, check permission attribute
if ($item instanceof Folder && $request->missing('permission')) {
return response()->json([
'type' => 'error',
'message' => 'The permission field for folder is required.',
], 422);
}
$this->authorize('owner', $item);
$shared = Share::create([
'password' => $request->has('password') ? bcrypt($request->input('password')) : null,
'type' => $request->input('type') === 'folder' ? 'folder' : 'file',
'is_protected' => $request->input('isPassword') ?? false,
'permission' => $request->input('permission') ?? null,
'expire_in' => $request->input('expiration') ?? null,
'item_id' => $item->id,
'user_id' => auth()->id(),
]);
// Send shared link via email
if ($request->has('emails')) {
($this->sendLinkToEmailAction)->onQueue()->execute(
emails: $request->input('emails'),
token: $shared->token,
user: $shared->user,
);
}
// Return created shared record
return response()->json(new ShareResource($shared), 201);
}
}

View File

@@ -1,4 +1,5 @@
<?php
namespace Domain\Sharing\Requests;
use Illuminate\Support\Facades\Auth;
@@ -24,12 +25,12 @@ class CreateShareRequest extends FormRequest
public function rules()
{
return [
'id' => 'required|string',
'isPassword' => 'required|boolean',
'isPassword' => 'sometimes|boolean',
'password' => 'required_if:isPassword,true',
'type' => 'required|string',
'expiration' => 'integer|nullable',
'permission' => 'string',
'password' => 'string',
'expiration' => 'sometimes|integer',
'permission' => 'sometimes|string',
'emails' => 'sometimes|array',
'emails.*' => 'email',
];
}