user(); abort_unless( $this->permissionService->allows($user, Permission::ProjectRead, $project), 403, ); return Inertia::render( 'projects/Board', $this->buildProjectBoardPayload->handle($project, $user, session('status')), ); } public function move( MoveProjectTicketRequest $request, Project $project, Ticket $ticket, ): RedirectResponse|JsonResponse { $user = $request->user(); abort_unless( $this->permissionService->allows($user, Permission::ProjectWrite, $project), 403, ); $validated = $request->validated(); $redirectRoute = Arr::get($validated, 'redirect_to') === 'backlog' ? 'projects.backlog.index' : 'projects.board.index'; $result = $this->moveProjectTicket->handle($project, $ticket, $user, $validated); $statusMessage = $result['moved'] ? "{$ticket->ticket_key} moved to {$result['destination_label']}." : "{$ticket->ticket_key} already belongs to {$result['destination_label']}."; if ($request->expectsJson()) { $ticket->refresh()->load([ 'ticketStatus.allowedTargetStatuses.boardColumn', 'ticketStatus.boardColumn', ]); return response()->json([ 'message' => $statusMessage, 'moved' => $result['moved'], 'ticket_status' => $ticket->ticketStatus === null ? null : TicketStatusResource::make($ticket->ticketStatus)->resolve(), 'ticket_status_id' => $ticket->ticket_status_id, ]); } if (! $result['moved']) { return to_route($redirectRoute, $project) ->with('status', $statusMessage); } return to_route($redirectRoute, $project) ->with('status', $statusMessage); } }