Add syncPropValues method to Propable trait; update StoreProductRequest and UpdateProductRequest to handle props validation

This commit is contained in:
2026-06-22 12:36:41 -03:00
parent 894f2a68de
commit 054a3a81eb
5 changed files with 43 additions and 2 deletions

View File

@@ -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);
}

View File

@@ -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(),
];
}
}

View File

@@ -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(),
];
}
}

View File

@@ -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);

View 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'],
];
}
}