mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 08:12:15 +00:00
create share api update
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
68
src/Domain/Sharing/Controllers/ShareItemController.php
Normal file
68
src/Domain/Sharing/Controllers/ShareItemController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user