refactor(catalog): Complete catalog refactor to simplify its data model and its querying.

source commits: refactor/catalog
This commit is contained in:
2026-07-21 09:23:19 -03:00
parent d3182fbd13
commit 29a2ca19a3
116 changed files with 5141 additions and 5217 deletions

View File

@@ -7,9 +7,10 @@ use App\Domains\Attachable\Models\Attachment;
use App\Domains\Auth\Models\User;
use App\Domains\Cart\Models\Cart;
use App\Domains\Catalog\Enums\InventoryPolicy;
use App\Domains\Catalog\Models\CatalogItem;
use App\Domains\Catalog\Models\Category;
use App\Domains\Catalog\Models\Product;
use App\Domains\Catalog\Models\ProductVariant;
use App\Domains\Catalog\Models\Inventory;
use App\Domains\Catalog\Models\Variant;
use App\Domains\Integration\Models\Integration;
use App\Domains\Integration\Models\TenantIntegration;
use App\Domains\Purchase\Models\Purchase;
@@ -177,17 +178,17 @@ class TelepagosWebhookTest extends TestCase
$this->assertDatabaseHas('compra_items', [
'compra_id' => $matchingPurchase->id,
'buyable_type' => ProductVariant::class,
'buyable_id' => $variant->id,
'source_catalog_item_id' => $variant->catalog_item_id,
'source_variant_id' => $variant->id,
'cantidad' => 1,
'total' => 50,
]);
$this->assertDatabaseHas('productos_variantes', [
'id' => $variant->id,
'stock_real' => 9,
'stock_reservado' => 2,
'cantidad_vendida' => 1,
$this->assertDatabaseHas('inventories', [
'id' => $variant->inventory_id,
'real_stock' => 9,
'reserved_stock' => 2,
'sold_units' => 1,
]);
$this->assertDatabaseMissing('compra_items', [
@@ -244,12 +245,11 @@ class TelepagosWebhookTest extends TestCase
'id' => $purchase->id,
'status' => Purchase::STATUS_PAID,
]);
$this->assertDatabaseHas('productos_variantes', [
'id' => $variant->id,
'inventory_policy' => InventoryPolicy::Unlimited->value,
'stock_real' => 0,
'stock_reservado' => 0,
'cantidad_vendida' => 3,
$this->assertDatabaseHas('inventories', [
'id' => $variant->inventory_id,
'real_stock' => 0,
'reserved_stock' => 0,
'sold_units' => 3,
]);
}
@@ -266,7 +266,8 @@ class TelepagosWebhookTest extends TestCase
'status' => 'active',
]);
$cart->addItem(ProductVariant::class, $variantId, $quantity);
$variant = Variant::query()->findOrFail($variantId);
$cart->addItem($variant->catalog_item_id, $variant->id, $quantity);
/** @var CheckoutService $checkoutService */
$checkoutService = app(CheckoutService::class);
@@ -317,30 +318,27 @@ class TelepagosWebhookTest extends TestCase
string $price,
string $slugPrefix = 'shirt',
InventoryPolicy $inventoryPolicy = InventoryPolicy::Tracked,
): ProductVariant {
): Variant {
$category = Category::query()->create([
'tenant_code' => $tenantCode,
'nombre' => "{$slugPrefix} category {$tenantCode}",
]);
$product = Product::query()->create([
'tenant_codigo' => $tenantCode,
'categoria_id' => $category->id,
'slug' => "{$slugPrefix}-{$tenantCode}-".Product::query()->count(),
$inventory = Inventory::query()->create(['real_stock' => $stock]);
$catalogItem = CatalogItem::query()->create([
'tenant_code' => $tenantCode,
'category_id' => $category->id,
'slug' => "{$slugPrefix}-{$tenantCode}-".CatalogItem::query()->count(),
'nombre' => ucfirst($slugPrefix)." {$tenantCode}",
'descripcion' => 'Test product',
'precio' => $price,
'inventory_policy' => $inventoryPolicy,
]);
return ProductVariant::query()->create([
'producto_id' => $product->id,
'inventory_policy' => $inventoryPolicy->value,
'slug' => "{$slugPrefix}-variant-".ProductVariant::query()->count(),
'nombre' => ucfirst($slugPrefix).' Variant',
'stock' => $stock,
'descripcion' => 'Test variant',
'precio' => $price,
])->load('product');
return Variant::query()->create([
'catalog_item_id' => $catalogItem->id,
'inventory_id' => $inventory->id,
])->load(['catalogItem', 'inventory']);
}
private function createTenant(string $codigo, string $nombre, string $dominio): Tenant