Add syncPropValues method to Propable trait; update StoreProductRequest and UpdateProductRequest to handle props validation
This commit is contained in:
@@ -19,7 +19,12 @@ class ProductController extends Controller
|
||||
|
||||
public function store(StoreProductRequest $request): JsonResponse
|
||||
{
|
||||
$product = Product::create($request->validated());
|
||||
$validated = $request->validated();
|
||||
$props = $validated['props'] ?? [];
|
||||
unset($validated['props']);
|
||||
|
||||
$product = Product::create($validated);
|
||||
$product->syncPropValues($props);
|
||||
|
||||
return ProductResource::make($product)->response()->setStatusCode(201);
|
||||
}
|
||||
@@ -31,7 +36,12 @@ class ProductController extends Controller
|
||||
|
||||
public function update(UpdateProductRequest $request, Product $producto): ProductResource
|
||||
{
|
||||
$producto->update($request->validated());
|
||||
$validated = $request->validated();
|
||||
$props = $validated['props'] ?? [];
|
||||
unset($validated['props']);
|
||||
|
||||
$producto->update($validated);
|
||||
$producto->syncPropValues($props);
|
||||
|
||||
return ProductResource::make($producto);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Domains\Product\Requests;
|
||||
|
||||
use App\Domains\Prop\Support\PropRules;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
@@ -24,6 +25,7 @@ class StoreProductRequest extends FormRequest
|
||||
'nombre' => ['required', 'string', 'max:255'],
|
||||
'descripcion' => ['nullable', 'string'],
|
||||
'precio' => ['required', 'numeric', 'min:0'],
|
||||
...PropRules::sync(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Domains\Product\Requests;
|
||||
|
||||
use App\Domains\Product\Models\Product;
|
||||
use App\Domains\Prop\Support\PropRules;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
@@ -33,6 +34,7 @@ class UpdateProductRequest extends FormRequest
|
||||
'nombre' => ['required', 'string', 'max:255'],
|
||||
'descripcion' => ['nullable', 'string'],
|
||||
'precio' => ['required', 'numeric', 'min:0'],
|
||||
...PropRules::sync(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,16 @@ trait Propable
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $props
|
||||
*/
|
||||
public function syncPropValues(array $props): void
|
||||
{
|
||||
foreach ($props as $codigo => $value) {
|
||||
$this->setPropValue($codigo, $value);
|
||||
}
|
||||
}
|
||||
|
||||
public function deletePropValue(Prop|string $prop): bool
|
||||
{
|
||||
$resolvedProp = $this->resolveProp($prop);
|
||||
|
||||
17
app/Domains/Prop/Support/PropRules.php
Normal file
17
app/Domains/Prop/Support/PropRules.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domains\Prop\Support;
|
||||
|
||||
class PropRules
|
||||
{
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public static function sync(): array
|
||||
{
|
||||
return [
|
||||
'props' => ['sometimes', 'array'],
|
||||
'props.*' => ['nullable'],
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user