41 lines
1.5 KiB
PHP
41 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Marketplace\Http\Controllers;
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Marketplace\Models\InstalledPackage;
|
|
use Modules\Marketplace\Models\MarketplacePackage;
|
|
use Modules\Marketplace\Services\MarketplaceManager;
|
|
|
|
final class MarketplaceApiController extends Controller
|
|
{
|
|
public function packages(Request $request): JsonResponse
|
|
{
|
|
return response()->json(MarketplacePackage::query()->with('publisher')->where('is_active', true)->when($request->filled('type'), fn ($q) => $q->where('type', $request->string('type')))->paginate(min(100, max(1, $request->integer('per_page', 25)))));
|
|
}
|
|
|
|
public function installed(): JsonResponse
|
|
{
|
|
return response()->json(InstalledPackage::query()->with('package')->paginate(50));
|
|
}
|
|
|
|
public function install(MarketplacePackage $package, MarketplaceManager $manager, Request $request): JsonResponse
|
|
{
|
|
return response()->json($manager->install($package, $request->user()?->id)->load('package'), 201);
|
|
}
|
|
|
|
public function toggle(InstalledPackage $package, MarketplaceManager $manager, Request $request): JsonResponse
|
|
{
|
|
return response()->json($manager->setEnabled($package, ! $package->is_enabled, $request->user()?->id));
|
|
}
|
|
|
|
public function remove(InstalledPackage $package, MarketplaceManager $manager, Request $request): JsonResponse
|
|
{
|
|
$manager->remove($package, $request->user()?->id);
|
|
|
|
return response()->json(['status' => 'removed']);
|
|
}
|
|
}
|