with('assignee') ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->latest() ->paginate(50) ->withQueryString(); return view('admin.support.index', compact('tickets')); } public function show(SupportTicket $ticket) { $ticket->load(['user', 'assignee']); if (auth()->user()) { auth()->user()->unreadNotifications()->get() ->filter(fn ($notification) => (int) ($notification->data['support_ticket_id'] ?? 0) === $ticket->id) ->each->markAsRead(); } return view('admin.support.show', [ 'ticket' => $ticket, 'admins' => User::query()->where('is_admin', true)->orderBy('name')->get(['id', 'name', 'email']), ]); } public function update(Request $request, SupportTicket $ticket): RedirectResponse { $data = $request->validate([ 'status' => ['required', 'in:new,open,waiting,resolved,closed'], 'priority' => ['required', 'in:low,normal,high,urgent'], 'assigned_to' => ['nullable', 'integer', 'exists:users,id'], ]); if ($data['assigned_to'] ?? null) { abort_unless(User::whereKey($data['assigned_to'])->where('is_admin', true)->exists(), 422); } $data['resolved_at'] = in_array($data['status'], ['resolved', 'closed'], true) ? ($ticket->resolved_at ?? now()) : null; $ticket->update($data); return back()->with('status', 'Support ticket updated.'); } }