with('publisher')->where('is_active', true)->when($request->filled('type'), fn ($q) => $q->where('type', $request->string('type')))->when($request->filled('search'), fn ($q) => $q->where(fn ($q) => $q->where('name', 'like', '%'.$request->string('search').'%')->orWhere('description', 'like', '%'.$request->string('search').'%')))->latest('is_featured')->paginate(20)->withQueryString(); return view('marketplace::index', compact('packages')); } public function installed(): View { $packages = InstalledPackage::query()->with('package')->latest()->paginate(25); return view('marketplace::installed', compact('packages')); } public function install(MarketplacePackage $package, MarketplaceManager $manager, Request $request): RedirectResponse { $manager->install($package, $request->user()?->id); return back()->with('status', 'Package installed successfully.'); } public function update(MarketplacePackage $package, MarketplaceManager $manager, Request $request): RedirectResponse { $manager->install($package, $request->user()?->id); return back()->with('status', 'Package updated successfully.'); } public function toggle(InstalledPackage $package, MarketplaceManager $manager, Request $request): RedirectResponse { $manager->setEnabled($package, ! $package->is_enabled, $request->user()?->id); return back()->with('status', 'Package state updated.'); } public function remove(InstalledPackage $package, MarketplaceManager $manager, Request $request): RedirectResponse { $manager->remove($package, $request->user()?->id); return back()->with('status', 'Package removed.'); } public function rollback(InstalledPackage $package, Installation $installation, MarketplaceManager $manager, Request $request): RedirectResponse { $manager->rollback($package, $installation, $request->user()?->id); return back()->with('status','Package rolled back.'); } }