mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-05 18:23:48 +00:00
teams api update
This commit is contained in:
@@ -52,7 +52,7 @@ class Handler extends ExceptionHandler
|
||||
if ($exception instanceof ModelNotFoundException) {
|
||||
if (in_array('application/json', $request->getAcceptableContentTypes())) {
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'type' => 'error',
|
||||
'message' => "We couldn't find your requested item.",
|
||||
], 404);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class UpdatePasswordController extends Controller
|
||||
): JsonResponse {
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => "The password was successfully changed.",
|
||||
'message' => 'The password was successfully changed.',
|
||||
];
|
||||
|
||||
if (isDemoAccount()) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
namespace App\Users\Controllers\Authentication;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Laravel\Sanctum\PersonalAccessToken;
|
||||
@@ -28,7 +28,7 @@ class AccountAccessTokenController extends Controller
|
||||
{
|
||||
if (isDemoAccount()) {
|
||||
return response()->json([
|
||||
'plainTextToken' => Str::random(40)
|
||||
'plainTextToken' => Str::random(40),
|
||||
], 201);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ class AccountAccessTokenController extends Controller
|
||||
{
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => "The token was successfully deleted.",
|
||||
'message' => 'The token was successfully deleted.',
|
||||
];
|
||||
|
||||
if (isDemoAccount()) {
|
||||
@@ -55,7 +55,7 @@ class AccountAccessTokenController extends Controller
|
||||
if (Auth::id() !== $token->tokenable_id) {
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => "You are not entitled to delete this token.",
|
||||
'message' => 'You are not entitled to delete this token.',
|
||||
], 401);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
namespace App\Users\Controllers\Authentication;
|
||||
|
||||
use App\Users\DTO\CreateUserData;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Users\Actions\CreateNewUserAction;
|
||||
use App\Users\Requests\RegisterUserRequest;
|
||||
use Illuminate\Contracts\Auth\StatefulGuard;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use VueFileManager\Subscription\Domain\Plans\Exceptions\MeteredBillingPlanDoesntExist;
|
||||
|
||||
class RegisterUserController extends Controller
|
||||
|
||||
@@ -9,7 +9,7 @@ class FlushUserNotificationsController extends Controller
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'type' => 'success',
|
||||
'message' => 'All your notifications was deleted.',
|
||||
];
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ class MarkUserNotificationsAsReadController extends Controller
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'type' => 'success',
|
||||
'message' => 'All your notifications was marked as read.',
|
||||
];
|
||||
|
||||
@@ -19,7 +19,7 @@ class MarkUserNotificationsAsReadController extends Controller
|
||||
|
||||
// Mark all notifications as read
|
||||
auth()->user()->unreadNotifications()->update([
|
||||
'read_at' => now()
|
||||
'read_at' => now(),
|
||||
]);
|
||||
|
||||
return response()->json($successMessage);
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class PingAPIController extends Controller
|
||||
{
|
||||
public function __invoke(): Response
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
return response('pong');
|
||||
return response()->json([
|
||||
'type' => 'success',
|
||||
'message' => 'pong',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<?php
|
||||
namespace Domain\Teams\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Domain\Teams\Models\TeamFolderMember;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Teams\Requests\ConvertIntoTeamFolderRequest;
|
||||
use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction;
|
||||
use Domain\Teams\Actions\SetTeamFolderPropertyForAllChildrenAction;
|
||||
@@ -21,15 +22,18 @@ class ConvertFolderIntoTeamFolderController extends Controller
|
||||
public function __invoke(
|
||||
ConvertIntoTeamFolderRequest $request,
|
||||
Folder $folder
|
||||
): ResponseFactory|Response {
|
||||
): JsonResponse {
|
||||
// Authorize action
|
||||
Gate::authorize('owner', [$folder]);
|
||||
|
||||
// Abort in demo mode
|
||||
if (isDemoAccount()) {
|
||||
return response($folder, 201);
|
||||
return response()->json(new FolderResource($folder), 201);
|
||||
}
|
||||
|
||||
// Check if user didn't exceed max team members limit
|
||||
if (! $folder->user->canInviteTeamMembers($request->input('invitations'))) {
|
||||
return response([
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'You exceed your members limit.',
|
||||
], 401);
|
||||
@@ -37,7 +41,7 @@ class ConvertFolderIntoTeamFolderController extends Controller
|
||||
|
||||
// Update root team folder
|
||||
$folder->update([
|
||||
'team_folder' => 1,
|
||||
'team_folder' => true,
|
||||
'parent_id' => null,
|
||||
]);
|
||||
|
||||
@@ -54,6 +58,6 @@ class ConvertFolderIntoTeamFolderController extends Controller
|
||||
// Invite team members
|
||||
($this->inviteMembers)($request->input('invitations'), $folder);
|
||||
|
||||
return response($folder, 201);
|
||||
return response()->json(new FolderResource($folder), 201);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,35 +2,53 @@
|
||||
namespace Domain\Teams\Controllers;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Teams\Models\TeamFolderMember;
|
||||
use Domain\Teams\Models\TeamFolderInvitation;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Domain\Teams\Resources\TeamInvitationResource;
|
||||
use Domain\Teams\Actions\ClearActionInInvitationNotificationAction;
|
||||
|
||||
class InvitationsController extends Controller
|
||||
{
|
||||
public function show(TeamFolderInvitation $invitation)
|
||||
public function show(TeamFolderInvitation $invitation): JsonResponse
|
||||
{
|
||||
// Check if invitation is not pending
|
||||
if ($invitation->status !== 'pending') {
|
||||
abort(410);
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'Invitation was already used.',
|
||||
], 410);
|
||||
}
|
||||
|
||||
return new TeamInvitationResource($invitation);
|
||||
return response()->json(new TeamInvitationResource($invitation));
|
||||
}
|
||||
|
||||
public function update(
|
||||
TeamFolderInvitation $invitation,
|
||||
ClearActionInInvitationNotificationAction $clearActionInInvitationNotification,
|
||||
): ResponseFactory|Response {
|
||||
): JsonResponse {
|
||||
// Check if invitation has other state than pending
|
||||
if ($invitation->status !== 'pending') {
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'The invitation was previously used.',
|
||||
], 422);
|
||||
}
|
||||
|
||||
// Prepare success message
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => 'Invitation was accepted.',
|
||||
];
|
||||
|
||||
// Get invited user
|
||||
$user = User::where('email', $invitation->email)
|
||||
->first();
|
||||
|
||||
if ($user) {
|
||||
if (isDemoAccount()) {
|
||||
return response('Done', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
|
||||
$invitation->accept();
|
||||
@@ -52,13 +70,27 @@ class InvitationsController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
|
||||
public function destroy(
|
||||
TeamFolderInvitation $invitation,
|
||||
ClearActionInInvitationNotificationAction $clearActionInInvitationNotification,
|
||||
): ResponseFactory|Response {
|
||||
): JsonResponse {
|
||||
// Check if invitation has other state than pending
|
||||
if ($invitation->status !== 'pending') {
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'The invitation was previously used.',
|
||||
], 422);
|
||||
}
|
||||
|
||||
// Prepare success message
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => 'Invitation was declined.',
|
||||
];
|
||||
|
||||
$invitation->reject();
|
||||
|
||||
// Get user from invitation
|
||||
@@ -68,12 +100,12 @@ class InvitationsController extends Controller
|
||||
// Clear action in existing notification
|
||||
if ($user) {
|
||||
if (isDemoAccount()) {
|
||||
return response('Done', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
|
||||
$clearActionInInvitationNotification($user, $invitation);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,25 +2,31 @@
|
||||
namespace Domain\Teams\Controllers;
|
||||
|
||||
use Gate;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class LeaveTeamFolderController extends Controller
|
||||
{
|
||||
public function __invoke(Folder $folder): Response|Application|ResponseFactory
|
||||
public function __invoke(Folder $folder): JsonResponse
|
||||
{
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => 'You left the team folder.',
|
||||
];
|
||||
|
||||
// Abort in demo mode
|
||||
if (isDemoAccount()) {
|
||||
return response('Done.', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
|
||||
// Authorize action
|
||||
if (! Gate::any(['can-edit', 'can-view'], [$folder, null])) {
|
||||
abort(403, 'Access Denied');
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'You are not member of this team folder.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
// Find and delete attached member from team folder
|
||||
@@ -29,6 +35,6 @@ class LeaveTeamFolderController extends Controller
|
||||
->where('user_id', auth()->id())
|
||||
->delete();
|
||||
|
||||
return response('Done.', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,13 @@ namespace Domain\Teams\Controllers;
|
||||
|
||||
use Gate;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class NavigationTreeController
|
||||
{
|
||||
public function __invoke(Folder $folder): array
|
||||
public function __invoke(Folder $folder): JsonResponse
|
||||
{
|
||||
// Get the root team folder
|
||||
$teamFolder = $folder->getLatestParent();
|
||||
|
||||
if (! Gate::any(['can-edit', 'can-view'], [$teamFolder, null])) {
|
||||
@@ -19,13 +21,13 @@ class NavigationTreeController
|
||||
->sortable()
|
||||
->get(['id', 'parent_id', 'id', 'name', 'team_folder']);
|
||||
|
||||
return [
|
||||
return response()->json([
|
||||
[
|
||||
'name' => $teamFolder->name,
|
||||
'folders' => $folders,
|
||||
'isMovable' => true,
|
||||
'isOpen' => true,
|
||||
],
|
||||
];
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ namespace Domain\Teams\Controllers;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -15,7 +15,6 @@ use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Teams\Actions\UpdateMembersAction;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
use Domain\Teams\Actions\UpdateInvitationsAction;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Domain\Teams\Requests\CreateTeamFolderRequest;
|
||||
use Domain\Teams\Requests\UpdateTeamFolderMembersRequest;
|
||||
use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction;
|
||||
@@ -63,15 +62,20 @@ class TeamFoldersController extends Controller
|
||||
|
||||
public function store(
|
||||
CreateTeamFolderRequest $request,
|
||||
): ResponseFactory | Response {
|
||||
): JsonResponse {
|
||||
// Abort in demo mode
|
||||
abort_if(isDemoAccount(), 201, 'Done.');
|
||||
if (isDemoAccount()) {
|
||||
return response()->json([
|
||||
'type' => 'success',
|
||||
'message' => 'The team folder was created',
|
||||
], 201);
|
||||
}
|
||||
|
||||
$data = CreateTeamFolderData::fromRequest($request);
|
||||
|
||||
// Check if user can create team folder
|
||||
if (! $request->user()->canCreateTeamFolder()) {
|
||||
return response([
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'This user action is not allowed.',
|
||||
], 401);
|
||||
@@ -79,7 +83,7 @@ class TeamFoldersController extends Controller
|
||||
|
||||
// Check if user didn't exceed max team members limit
|
||||
if (! $request->user()->canInviteTeamMembers($data->invitations)) {
|
||||
return response([
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'You exceed your members limit.',
|
||||
], 401);
|
||||
@@ -89,7 +93,7 @@ class TeamFoldersController extends Controller
|
||||
$folder = Folder::create([
|
||||
'user_id' => $request->user()->id,
|
||||
'name' => $data->name,
|
||||
'team_folder' => 1,
|
||||
'team_folder' => true,
|
||||
]);
|
||||
|
||||
// Attach owner into members
|
||||
@@ -102,7 +106,7 @@ class TeamFoldersController extends Controller
|
||||
// Invite team members
|
||||
$this->inviteMembers->onQueue()->execute($data->invitations, $folder);
|
||||
|
||||
return response(new FolderResource($folder), 201);
|
||||
return response()->json(new FolderResource($folder), 201);
|
||||
}
|
||||
|
||||
public function update(
|
||||
@@ -110,10 +114,10 @@ class TeamFoldersController extends Controller
|
||||
Folder $folder,
|
||||
UpdateInvitationsAction $updateInvitations,
|
||||
UpdateMembersAction $updateMembers,
|
||||
): ResponseFactory | Response {
|
||||
): JsonResponse {
|
||||
// Abort in demo mode
|
||||
if (isDemoAccount()) {
|
||||
return response(new FolderResource($folder), 201);
|
||||
return response()->json(new FolderResource($folder), 201);
|
||||
}
|
||||
|
||||
// Authorize request
|
||||
@@ -121,7 +125,7 @@ class TeamFoldersController extends Controller
|
||||
|
||||
// Check if user didn't exceed max team members limit
|
||||
if (! $request->user()->canInviteTeamMembers($request->input('invitations'))) {
|
||||
return response([
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'You exceed your members limit.',
|
||||
], 401);
|
||||
@@ -137,14 +141,26 @@ class TeamFoldersController extends Controller
|
||||
$request->input('members')
|
||||
);
|
||||
|
||||
return response(new FolderResource($folder), 201);
|
||||
return response()->json(new FolderResource($folder), 201);
|
||||
}
|
||||
|
||||
public function destroy(Folder $folder): ResponseFactory | Response
|
||||
public function destroy(Folder $folder): JsonResponse
|
||||
{
|
||||
if (! $folder->team_folder) {
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => "You're trying to access non-team folder.",
|
||||
]);
|
||||
}
|
||||
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => 'The team was dissolved.',
|
||||
];
|
||||
|
||||
// Abort in demo mode
|
||||
if (isDemoAccount()) {
|
||||
return response('Done.', 201);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
|
||||
$this->authorize('owner', $folder);
|
||||
@@ -162,9 +178,9 @@ class TeamFoldersController extends Controller
|
||||
($this->setTeamFolderPropertyForAllChildren)($folder, false);
|
||||
|
||||
$folder->update([
|
||||
'team_folder' => 0,
|
||||
'team_folder' => false,
|
||||
]);
|
||||
|
||||
return response('Done.', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
* @property string parent_id
|
||||
* @property string email
|
||||
* @property string status
|
||||
* @property string permission
|
||||
* @property string created_at
|
||||
* @property string updated_at
|
||||
*/
|
||||
|
||||
@@ -23,7 +23,10 @@ class ConvertIntoTeamFolderRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'invitations' => 'required|array',
|
||||
'invitations' => 'required|array',
|
||||
'invitations.*.email' => 'required|email',
|
||||
'invitations.*.permission' => 'required|string',
|
||||
'invitations.*.type' => 'required|string',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,11 @@ class CreateTeamFolderRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'name' => 'required|string',
|
||||
'invitations' => 'required|array',
|
||||
'name' => 'required|string',
|
||||
'invitations' => 'required|array',
|
||||
'invitations.*.email' => 'required|email',
|
||||
'invitations.*.permission' => 'required|string',
|
||||
'invitations.*.type' => 'required|string',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,13 @@ class UpdateTeamFolderMembersRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'members' => 'present|array',
|
||||
'invitations' => 'present|array',
|
||||
'members' => 'present|array',
|
||||
'members.*.permission' => 'required|string',
|
||||
'members.*.id' => 'required|uuid',
|
||||
'invitations' => 'present|array',
|
||||
'invitations.*.email' => 'required|email',
|
||||
'invitations.*.permission' => 'required|string',
|
||||
'invitations.*.type' => 'required|string',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@ namespace Domain\UploadRequest\Controllers;
|
||||
|
||||
use Auth;
|
||||
use Gate;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Notification;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Domain\UploadRequest\Requests\StoreUploadRequest;
|
||||
use Domain\UploadRequest\Resources\UploadRequestResource;
|
||||
use Domain\UploadRequest\Notifications\UploadRequestNotification;
|
||||
|
||||
Reference in New Issue
Block a user