user(); abort_unless( $this->projectPermissionService->userCanViewProject($user, $project), 403, ); return Inertia::render('projects/Board', [ 'boardColumns' => $project->boardColumns() ->with([ 'tickets' => fn ($query) => $query ->with(['ticketPriority', 'ticketType']), ]) ->get(), 'canEditTickets' => $this->projectPermissionService->userHasPermission($user, $project, 'edit'), 'project' => $project, 'status' => session('status'), ]); } public function move( MoveProjectTicketRequest $request, Project $project, Ticket $ticket, ): RedirectResponse { $user = $request->user(); abort_unless( $this->projectPermissionService->userHasPermission($user, $project, 'edit'), 403, ); $validated = $request->validated(); $boardColumnId = Arr::get($validated, 'board_column_id'); $redirectRoute = Arr::get($validated, 'redirect_to') === 'backlog' ? 'projects.backlog.index' : 'projects.board.index'; $destinationColumn = $project->boardColumns() ->find($boardColumnId); $originBoardColumnId = $ticket->board_column_id; $originLabel = $ticket->boardColumn?->name ?? 'Backlog'; $destinationLabel = $destinationColumn?->name ?? 'Backlog'; if ($ticket->board_column_id === $boardColumnId) { return to_route($redirectRoute, $project) ->with('status', "{$ticket->ticket_key} already belongs to {$destinationLabel}."); } $ticket->update([ 'board_column_id' => $destinationColumn?->id, ]); $this->createTicketWorklogEntry->handle( $ticket->fresh(), $user, 'status_changed', "Moved from {$originLabel} to {$destinationLabel}.", [ 'from' => [ 'board_column_id' => $originBoardColumnId, 'label' => $originLabel, ], 'to' => [ 'board_column_id' => $destinationColumn?->id, 'label' => $destinationLabel, ], ], ); return to_route($redirectRoute, $project) ->with('status', "{$ticket->ticket_key} moved to {$destinationLabel}."); } }