feat: add is_default field to product variants and implement default variant management logic in ProductService

This commit is contained in:
2026-07-01 10:02:26 -03:00
parent 83f42f3cf9
commit d6a17cb449
4 changed files with 47 additions and 6 deletions

View File

@@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
#[Fillable([
'producto_id',
'stock',
'is_default',
])]
class ProductVariant extends Model
{
@@ -25,6 +26,7 @@ class ProductVariant extends Model
return [
'producto_id' => 'integer',
'stock' => 'integer',
'is_default' => 'boolean',
];
}

View File

@@ -44,6 +44,7 @@ class ProductService
// Create default variant with stock
$this->createVariant($product, [
'stock' => $stock,
'is_default' => true,
'definitions' => [],
]);
@@ -116,11 +117,14 @@ class ProductService
$images = $data['images'] ?? [];
unset($data['images']);
// If the variant being created has definitions, it is a real variant.
// Remove any default variants (those without definitions).
// Determine if the variant being created is a default one
$hasDefinitions = ! empty($data['definitions']);
if ($hasDefinitions) {
$defaultVariants = $product->variants()->whereDoesntHave('definitions')->get();
$isDefault = $data['is_default'] ?? (! $hasDefinitions);
$data['is_default'] = $isDefault;
// If the variant being created is not a default variant, remove any existing default variants
if (! $isDefault) {
$defaultVariants = $product->variants()->where('is_default', true)->get();
foreach ($defaultVariants as $defaultVariant) {
$this->deleteVariantAttachments($defaultVariant);
$product->deleteVariant($defaultVariant);
@@ -176,6 +180,7 @@ class ProductService
if ($product->variants()->count() === 0) {
$product->createVariant([
'stock' => 0,
'is_default' => true,
'definitions' => [],
]);
}