feat(seeder): update featured groups configuration with product and group layouts

This commit is contained in:
2026-07-24 10:42:27 -03:00
parent c1be9ecf7f
commit 18c23a112a
2 changed files with 55 additions and 23 deletions

View File

@@ -139,42 +139,58 @@ class FiestaFutbolInfantilProductSeeder extends Seeder
$groups = [ $groups = [
'Entradas' => [ 'Entradas' => [
'product_layout' => ProductLayout::Row,
'group_layout' => GroupLayout::SimpleVertical,
'slugs' => [
'entrada-general', 'entrada-general',
'entrada-general-todos-los-dias', 'entrada-general-todos-los-dias',
], ],
],
'Estacionamiento' => [ 'Estacionamiento' => [
'product_layout' => ProductLayout::ColumnWithCart,
'group_layout' => GroupLayout::Simple,
'slugs' => [
'estacionamiento-auto', 'estacionamiento-auto',
'estacionamiento-moto', 'estacionamiento-moto',
], ],
],
'Comidas' => [ 'Comidas' => [
'product_layout' => ProductLayout::ColumnWithCart,
'group_layout' => GroupLayout::Simple,
'slugs' => [
'hamburguesa-papa-frita', 'hamburguesa-papa-frita',
'pancho', 'pancho',
'combo-2-panchos-2-hamburguesas', 'combo-2-panchos-2-hamburguesas',
], ],
],
'Bebidas' => [ 'Bebidas' => [
'product_layout' => ProductLayout::ColumnWithCart,
'group_layout' => GroupLayout::Simple,
'slugs' => [
'coca-cola-500ml', 'coca-cola-500ml',
'agua-mineral-1l', 'agua-mineral-1l',
], ],
],
]; ];
$catalogItems = CatalogItem::query() $catalogItems = CatalogItem::query()
->where('tenant_code', $tenant->codigo) ->where('tenant_code', $tenant->codigo)
->whereIn('slug', collect($groups)->flatten()->all()) ->whereIn('slug', collect($groups)->pluck('slugs')->flatten()->all())
->get() ->get()
->keyBy('slug'); ->keyBy('slug');
$groupOrder = 0; $groupOrder = 0;
foreach ($groups as $groupName => $slugs) { foreach ($groups as $groupName => $config) {
$featuredGroup = FeaturedGroup::query()->create([ $featuredGroup = FeaturedGroup::query()->create([
'tenant_code' => $tenant->codigo, 'tenant_code' => $tenant->codigo,
'product_layout' => ProductLayout::Row, 'product_layout' => $config['product_layout'],
'group_layout' => GroupLayout::Paginated, 'group_layout' => $config['group_layout'],
'group_name' => $groupName, 'group_name' => $groupName,
'group_order' => $groupOrder++, 'group_order' => $groupOrder++,
]); ]);
$featuredGroup->featuredItems()->createMany( $featuredGroup->featuredItems()->createMany(
collect($slugs)->values()->map( collect($config['slugs'])->values()->map(
fn (string $slug, int $order): array => [ fn (string $slug, int $order): array => [
'catalog_item_id' => $catalogItems->get($slug)->id, 'catalog_item_id' => $catalogItems->get($slug)->id,
'order' => $order, 'order' => $order,

View File

@@ -6,6 +6,7 @@ use App\Domains\Attachable\Enums\AttachmentType;
use App\Domains\Attachable\Models\Attachment; use App\Domains\Attachable\Models\Attachment;
use App\Domains\Catalog\Enums\CatalogItemType; use App\Domains\Catalog\Enums\CatalogItemType;
use App\Domains\Catalog\Enums\GroupLayout; use App\Domains\Catalog\Enums\GroupLayout;
use App\Domains\Catalog\Enums\ProductLayout;
use App\Domains\Catalog\Models\Attribute; use App\Domains\Catalog\Models\Attribute;
use App\Domains\Catalog\Models\CatalogItem; use App\Domains\Catalog\Models\CatalogItem;
use App\Domains\Catalog\Models\FeaturedGroup; use App\Domains\Catalog\Models\FeaturedGroup;
@@ -122,6 +123,12 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase
$this->assertSame(9, CatalogItem::query()->where('tenant_code', $tenant->codigo)->count()); $this->assertSame(9, CatalogItem::query()->where('tenant_code', $tenant->codigo)->count());
$this->assertSame(10, Inventory::query()->count()); $this->assertSame(10, Inventory::query()->count());
$featuredGroups = FeaturedGroup::query()
->where('tenant_code', $tenant->codigo)
->with('featuredItems.catalogItem')
->orderBy('group_order')
->get();
$this->assertSame( $this->assertSame(
[ [
'Entradas' => ['entrada-general', 'entrada-general-todos-los-dias'], 'Entradas' => ['entrada-general', 'entrada-general-todos-los-dias'],
@@ -129,19 +136,28 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase
'Comidas' => ['hamburguesa-papa-frita', 'pancho', 'combo-2-panchos-2-hamburguesas'], 'Comidas' => ['hamburguesa-papa-frita', 'pancho', 'combo-2-panchos-2-hamburguesas'],
'Bebidas' => ['coca-cola-500ml', 'agua-mineral-1l'], 'Bebidas' => ['coca-cola-500ml', 'agua-mineral-1l'],
], ],
FeaturedGroup::query() $featuredGroups
->where('tenant_code', $tenant->codigo)
->with('featuredItems.catalogItem')
->orderBy('group_order')
->get()
->each(fn (FeaturedGroup $group) => $this->assertSame(
GroupLayout::Paginated,
$group->group_layout,
))
->mapWithKeys(fn (FeaturedGroup $group): array => [ ->mapWithKeys(fn (FeaturedGroup $group): array => [
$group->group_name => $group->featuredItems->pluck('catalogItem.slug')->all(), $group->group_name => $group->featuredItems->pluck('catalogItem.slug')->all(),
]) ])
->all() ->all()
); );
$this->assertSame(
[
['Entradas', ProductLayout::Row, GroupLayout::SimpleVertical, 0],
['Estacionamiento', ProductLayout::ColumnWithCart, GroupLayout::Simple, 1],
['Comidas', ProductLayout::ColumnWithCart, GroupLayout::Simple, 2],
['Bebidas', ProductLayout::ColumnWithCart, GroupLayout::Simple, 3],
],
$featuredGroups
->map(fn (FeaturedGroup $group): array => [
$group->group_name,
$group->product_layout,
$group->group_layout,
$group->group_order,
])
->all()
);
} }
} }