service->getAll(); return $this->successResponse(payload: StoreItemResource::collection($items)); } public function store(StoreItemRequest $request): JsonResponse { $item = $this->service->create($request->validated()); return $this->successResponse( payload: new StoreItemResource($item), message: __('messages.created'), code: 201, ); } public function show(int $id): JsonResponse { $item = $this->service->findById($id); return $this->successResponse(payload: new StoreItemResource($item)); } public function update(StoreItemRequest $request, int $id): JsonResponse { $item = $this->service->update($id, $request->validated()); return $this->successResponse( payload: new StoreItemResource($item), message: __('messages.updated'), ); } public function destroy(int $id): JsonResponse { $this->service->delete($id); return $this->successResponse(message: __('messages.deleted'), code: 204); } public function indexPaginated(Request $request): JsonResponse { $perPage = (int) $request->query('per_page', 10); $filters = $request->only(['search', 'status', 'category_id']); $paginator = $this->service->getAllPaginated($filters, $perPage); return $this->successResponse(payload: [ 'data' => StoreItemResource::collection($paginator->items()), 'total' => $paginator->total(), 'from' => $paginator->firstItem(), 'to' => $paginator->lastItem(), ]); } public function toggleStatus(int $id): JsonResponse { $item = $this->service->toggleStatus($id); return $this->successResponse( payload: new StoreItemResource($item), message: __('messages.updated'), ); } public function myInterests(): JsonResponse { $items = $this->service->getMyInterests(); return $this->successResponse(payload: StoreItemResource::collection($items)); } public function toggleInterest(int $id): JsonResponse { $result = $this->service->toggleInterest($id); return $this->successResponse( payload: $result, message: __('messages.updated'), ); } public function uploadMedia(UploadMediaRequest $request, int $id): JsonResponse { $file = $request->file('file'); $media = $this->mediaService->upload($file, 'store_item', $id, 'imagem'); return $this->successResponse(payload: new MediaResource($media), code: 201); } public function deleteMedia(int $id, int $mediaId): JsonResponse { $this->mediaService->delete($mediaId); return $this->successResponse(message: __('messages.deleted'), code: 204); } public function getInterests(int $id): JsonResponse { $interests = $this->service->getInterestsByItem($id); return $this->successResponse(payload: $interests); } public function addVariation(Request $request, int $id): JsonResponse { $data = $request->validate([ 'variation_type' => 'required|string|in:tamanho,cor,modelo', 'variation_label' => 'required|string|max:100', 'variation_value' => 'nullable|numeric|min:0', 'stock' => 'nullable|integer|min:0', ]); $variation = $this->service->addVariation($id, $data); return $this->successResponse(payload: new StoreItemVariationResource($variation), code: 201); } public function updateVariation(Request $request, int $id, int $variationId): JsonResponse { $data = $request->validate([ 'variation_label' => 'sometimes|string|max:100', 'variation_value' => 'nullable|numeric|min:0', 'stock' => 'nullable|integer|min:0', ]); $variation = $this->service->updateVariation($id, $variationId, $data); return $this->successResponse(payload: new StoreItemVariationResource($variation)); } public function deleteVariation(int $id, int $variationId): JsonResponse { $this->service->deleteVariation($id, $variationId); return $this->successResponse(code: 204); } }