where('tenant_code', $tenant->codigo) ->orderBy('group_order') ->get(); return response()->json($featuredGroups->map( fn (FeaturedGroup $featuredGroup): array => (new CatalogFeaturedGroupResource( $featuredGroup, $featuredGroupService->itemsResponse($featuredGroup, 1), ))->resolve() )); } public function search( SearchCatalogItemsRequest $request, Tenant $tenant, CatalogService $catalogService, ): AnonymousResourceCollection { return CatalogSearchItemResource::collection( $catalogService->search( $tenant, $request->validated('q'), $tenant->search_items_per_page, (int) $request->validated('page', 1), ) ); } public function category( CategoryPageRequest $request, Tenant $tenant, Category $category, CatalogService $catalogService, ): AnonymousResourceCollection { abort_unless($category->tenant_code === $tenant->codigo, 404); return CatalogSearchItemResource::collection( $catalogService->categoryItems( $tenant, $category, $tenant->search_items_per_page, (int) $request->validated('page', 1), ) )->additional([ 'category' => [ 'id' => $category->id, 'nombre' => $category->nombre, 'categoria_id' => $category->categoria_id, ], 'layout' => $tenant->search_product_layout->value, 'group_layout' => $tenant->search_group_layout->value, ]); } public function featuredGroupItems( FeaturedGroupPageRequest $request, Tenant $tenant, FeaturedGroup $featuredGroup, FeaturedGroupService $featuredGroupService, ): JsonResponse { abort_unless($featuredGroup->tenant_code === $tenant->codigo, 404); $page = (int) $request->validated('page', 1); return response()->json($featuredGroupService->itemsResponse($featuredGroup, $page)); } public function show( CatalogItemDetailRequest $request, Tenant $tenant, CatalogItem $catalogItem, CatalogService $catalogService, ): CatalogItemDetailResource { abort_unless($catalogItem->tenant_code === $tenant->codigo, 404); $variantId = $request->validated('variant_id'); return CatalogItemDetailResource::make( $catalogService->getDetail( $catalogItem, $variantId === null ? null : (int) $variantId, ) ); } public function store( StoreCatalogItemRequest $request, Tenant $tenant, CatalogService $catalogService, ): JsonResponse { $catalogItem = $catalogService->create([ ...$request->validated(), 'tenant_code' => $tenant->codigo, ]); return CatalogItemResource::make($catalogItem) ->response() ->setStatusCode(201); } }