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'), ), 'canManageProject' => $this->permissionService->allows( $user, Permission::ProjectAdmin, $project, ), ], ); } 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|JsonResponse { $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.'; if ($request->expectsJson()) { return response()->json([ 'message' => $statusMessage, 'updated' => $wasUpdated, ]); } return to_route('projects.tickets.show', [$project, $ticket]) ->with('status', $statusMessage); } }