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
|
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);
|
return ProductResource::make($product)->response()->setStatusCode(201);
|
||||||
}
|
}
|
||||||
@@ -31,7 +36,12 @@ class ProductController extends Controller
|
|||||||
|
|
||||||
public function update(UpdateProductRequest $request, Product $producto): ProductResource
|
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);
|
return ProductResource::make($producto);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Domains\Product\Requests;
|
namespace App\Domains\Product\Requests;
|
||||||
|
|
||||||
|
use App\Domains\Prop\Support\PropRules;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
@@ -24,6 +25,7 @@ class StoreProductRequest extends FormRequest
|
|||||||
'nombre' => ['required', 'string', 'max:255'],
|
'nombre' => ['required', 'string', 'max:255'],
|
||||||
'descripcion' => ['nullable', 'string'],
|
'descripcion' => ['nullable', 'string'],
|
||||||
'precio' => ['required', 'numeric', 'min:0'],
|
'precio' => ['required', 'numeric', 'min:0'],
|
||||||
|
...PropRules::sync(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Domains\Product\Requests;
|
namespace App\Domains\Product\Requests;
|
||||||
|
|
||||||
use App\Domains\Product\Models\Product;
|
use App\Domains\Product\Models\Product;
|
||||||
|
use App\Domains\Prop\Support\PropRules;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ class UpdateProductRequest extends FormRequest
|
|||||||
'nombre' => ['required', 'string', 'max:255'],
|
'nombre' => ['required', 'string', 'max:255'],
|
||||||
'descripcion' => ['nullable', 'string'],
|
'descripcion' => ['nullable', 'string'],
|
||||||
'precio' => ['required', 'numeric', 'min:0'],
|
'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
|
public function deletePropValue(Prop|string $prop): bool
|
||||||
{
|
{
|
||||||
$resolvedProp = $this->resolveProp($prop);
|
$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