service->getAllForSelect(); return $this->successResponse(payload: $items); } public function index(): JsonResponse { $items = $this->service->getAll(); return $this->successResponse(payload: ProductResource::collection($items)); } public function store(ProductRequest $request): JsonResponse { $item = $this->service->create($request->validated()); return $this->successResponse(payload: new ProductResource($item), message: __('messages.created'), code: 201); } public function show(int $id): JsonResponse { $item = $this->service->findById($id); return $this->successResponse(payload: new ProductResource($item)); } public function update(ProductRequest $request, int $id): JsonResponse { $item = $this->service->update($id, $request->validated()); return $this->successResponse(payload: new ProductResource($item), message: __('messages.updated')); } public function destroy(int $id): JsonResponse { $this->service->delete($id); return $this->successResponse(message: __('messages.deleted'), code: 204); } public function import(Request $request): JsonResponse { $request->validate(['file' => 'required|file|mimes:xlsx,xls,csv']); $spreadsheet = IOFactory::load($request->file('file')->getRealPath()); $rows = $spreadsheet->getActiveSheet()->toArray(); if (empty($rows)) { return $this->errorResponse('Arquivo vazio.', 422); } $headers = array_map(fn($h) => mb_strtolower(trim((string) $h)), $rows[0]); $colName = null; $colQty = null; $colPrice = null; foreach ($headers as $i => $h) { if ($colName === null && str_contains($h, 'descri')) $colName = $i; if ($colQty === null && (str_contains($h, 'qtd') || str_contains($h, 'quant'))) $colQty = $i; if ($colPrice === null && (str_contains($h, 'pre') || str_contains($h, 'valor'))) $colPrice = $i; } if ($colName === null || $colQty === null || $colPrice === null) { return $this->errorResponse('Colunas não encontradas. O arquivo deve conter: Descrição, Qtd, Preço.', 422); } $imported = []; for ($i = 1; $i < count($rows); $i++) { $row = $rows[$i]; $name = trim((string) ($row[$colName] ?? '')); if ($name === '') continue; $qty = (int) ($row[$colQty] ?? 0); $price = (float) ($row[$colPrice] ?? 0); $product = $this->service->importRow($name, $qty, $price); $imported[] = new ProductResource($product); } return $this->successResponse(payload: $imported); } public function adjustStock(ProductStockRequest $request, int $id): JsonResponse { $result = $this->service->adjustStock($id, $request->type, $request->quantity); if (isset($result['error'])) { return $this->errorResponse($result['error'], 422); } return $this->successResponse(payload: new ProductResource($result['product']), message: __('messages.updated')); } }