63 lines
2.5 KiB
PHP
63 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Catalog\Controllers;
|
|
|
|
use App\Domains\Bundle\Models\Bundle;
|
|
use App\Domains\Catalog\Models\FeaturedGroup;
|
|
use App\Domains\Catalog\Models\GroupItem;
|
|
use App\Domains\Catalog\Models\ProductVariant;
|
|
use App\Domains\Catalog\Requests\StoreFeaturedVariantRequest;
|
|
use App\Domains\Catalog\Requests\UpdateFeaturedVariantRequest;
|
|
use App\Domains\Catalog\Resources\FeaturedVariantResource;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
|
use Illuminate\Routing\Controller;
|
|
|
|
class FeaturedVariantController extends Controller
|
|
{
|
|
public function index(string $tenant, FeaturedGroup $featuredGroup): AnonymousResourceCollection
|
|
{
|
|
abort_if($featuredGroup->tenant_codigo !== $tenant, 404);
|
|
|
|
return FeaturedVariantResource::collection($featuredGroup->groupItems);
|
|
}
|
|
|
|
public function store(StoreFeaturedVariantRequest $request, string $tenant, FeaturedGroup $featuredGroup): FeaturedVariantResource
|
|
{
|
|
abort_if($featuredGroup->tenant_codigo !== $tenant, 404);
|
|
|
|
$groupableType = $request->mappedGroupableType();
|
|
$groupable = $groupableType::query()->findOrFail($request->integer('groupable_id'));
|
|
|
|
abort_if(
|
|
($groupable instanceof ProductVariant && $groupable->product()->where('tenant_codigo', $tenant)->doesntExist())
|
|
|| ($groupable instanceof Bundle && $groupable->tenant_codigo !== $tenant),
|
|
404
|
|
);
|
|
|
|
$groupItem = $featuredGroup->groupItems()->create([
|
|
'groupable_type' => $groupableType,
|
|
'groupable_id' => $groupable->getKey(),
|
|
'order' => $request->validated('order'),
|
|
]);
|
|
|
|
return new FeaturedVariantResource($groupItem);
|
|
}
|
|
|
|
public function update(UpdateFeaturedVariantRequest $request, string $tenant, FeaturedGroup $featuredGroup, GroupItem $featuredVariant): FeaturedVariantResource
|
|
{
|
|
abort_if($featuredGroup->tenant_codigo !== $tenant || $featuredVariant->featured_group_id !== $featuredGroup->id, 404);
|
|
$featuredVariant->update($request->validated());
|
|
|
|
return new FeaturedVariantResource($featuredVariant);
|
|
}
|
|
|
|
public function destroy(string $tenant, FeaturedGroup $featuredGroup, GroupItem $featuredVariant): JsonResponse
|
|
{
|
|
abort_if($featuredGroup->tenant_codigo !== $tenant || $featuredVariant->featured_group_id !== $featuredGroup->id, 404);
|
|
$featuredVariant->delete();
|
|
|
|
return response()->json(null, 204);
|
|
}
|
|
}
|