user(); abort_unless( $this->permissionService->allows($user, Permission::ProjectWrite, $project), 403, ); return Inertia::render( 'projects/TicketCreate', $this->buildProjectTicketOptionsPayload->handle( $project, Arr::get($request->query(), 'source') === 'board' ? 'board' : 'backlog', session('status'), ), ); } public function store(StoreProjectTicketRequest $request, Project $project): RedirectResponse { $user = $request->user(); abort_unless( $this->permissionService->allows($user, Permission::ProjectWrite, $project), 403, ); $ticket = $this->createProjectTicket->handle( $project, $request->validated(), $user, ); return to_route('projects.tickets.show', [$project, $ticket]) ->with('status', "{$ticket->ticket_key} was created."); } public function show(Request $request, Project $project, Ticket $ticket): Response { $user = $request->user(); abort_unless( $this->permissionService->allows($user, Permission::ProjectRead, $project), 403, ); return Inertia::render( 'projects/Ticket', $this->buildProjectTicketDetailPayload->handle($project, $ticket, $user, session('status')), ); } public function update( UpdateProjectTicketRequest $request, Project $project, Ticket $ticket, ): RedirectResponse { $user = $request->user(); abort_unless( $this->permissionService->allows($user, Permission::ProjectWrite, $project), 403, ); $validated = $request->validated(); $wasUpdated = $this->updateProjectTicket->handle( $ticket, $user, $validated, ); $statusMessage = $wasUpdated ? "{$ticket->ticket_key} was updated." : 'No ticket changes were detected.'; return to_route('projects.tickets.show', [$project, $ticket]) ->with('status', $statusMessage); } }