diff --git a/app/Domains/Product/Controllers/ProductController.php b/app/Domains/Product/Controllers/ProductController.php index 2bf9d27..877aaf7 100644 --- a/app/Domains/Product/Controllers/ProductController.php +++ b/app/Domains/Product/Controllers/ProductController.php @@ -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); } diff --git a/app/Domains/Product/Requests/StoreProductRequest.php b/app/Domains/Product/Requests/StoreProductRequest.php index 28e1e3d..5a54877 100644 --- a/app/Domains/Product/Requests/StoreProductRequest.php +++ b/app/Domains/Product/Requests/StoreProductRequest.php @@ -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(), ]; } } diff --git a/app/Domains/Product/Requests/UpdateProductRequest.php b/app/Domains/Product/Requests/UpdateProductRequest.php index 48183b2..d4a9070 100644 --- a/app/Domains/Product/Requests/UpdateProductRequest.php +++ b/app/Domains/Product/Requests/UpdateProductRequest.php @@ -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(), ]; } } diff --git a/app/Domains/Prop/Concerns/Propable.php b/app/Domains/Prop/Concerns/Propable.php index 59a1da4..750b6c6 100644 --- a/app/Domains/Prop/Concerns/Propable.php +++ b/app/Domains/Prop/Concerns/Propable.php @@ -60,6 +60,16 @@ trait Propable ); } + /** + * @param array $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); diff --git a/app/Domains/Prop/Support/PropRules.php b/app/Domains/Prop/Support/PropRules.php new file mode 100644 index 0000000..48b89ff --- /dev/null +++ b/app/Domains/Prop/Support/PropRules.php @@ -0,0 +1,17 @@ + + */ + public static function sync(): array + { + return [ + 'props' => ['sometimes', 'array'], + 'props.*' => ['nullable'], + ]; + } +}