Просмотр исходного кода

feat(products): adiciona estoque

ebagabee 1 месяц назад
Родитель
Сommit
c6f62cbf1e

+ 12 - 0
app/Http/Controllers/ProductController.php

@@ -4,6 +4,7 @@
 
 use App\Services\ProductService;
 use App\Http\Requests\ProductRequest;
+use App\Http\Requests\ProductStockRequest;
 use App\Http\Resources\ProductResource;
 use Illuminate\Http\JsonResponse;
 
@@ -48,4 +49,15 @@ public function destroy(int $id): JsonResponse
         $this->service->delete($id);
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
+
+    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'));
+    }
 }

+ 16 - 0
app/Http/Requests/ProductStockRequest.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ProductStockRequest extends FormRequest
+{
+    public function rules(): array
+    {
+        return [
+            'type'     => 'required|in:entrada,saida',
+            'quantity' => 'required|integer|min:1',
+        ];
+    }
+}

+ 20 - 1
app/Services/ProductService.php

@@ -50,5 +50,24 @@ public function delete(int $id): bool
         return $model->delete();
     }
 
-    // Add custom business logic methods here
+    public function adjustStock(int $id, string $type, int $quantity): array
+    {
+        $product = $this->findById($id);
+
+        if (!$product) {
+            return ['error' => 'Produto não encontrado.'];
+        }
+
+        if ($type === 'saida' && $product->quantity < $quantity) {
+            return ['error' => "Estoque insuficiente. Disponível: {$product->quantity}"];
+        }
+
+        $product->quantity = $type === 'entrada'
+            ? $product->quantity + $quantity
+            : $product->quantity - $quantity;
+
+        $product->save();
+
+        return ['product' => $product->fresh()];
+    }
 }

+ 2 - 0
routes/authRoutes/product.php

@@ -15,4 +15,6 @@
     Route::put('/{id}', 'update')->middleware('permission:product,edit');
 
     Route::delete('/{id}', 'destroy')->middleware('permission:product,delete');
+
+    Route::patch('/{id}/stock', 'adjustStock')->middleware('permission:product,edit');
 });