feat(menu): add account menu hierarchy and related tests in MenuSeeder and MenuSeederTest

This commit is contained in:
2026-07-24 10:07:47 -03:00
parent f6ce85cbde
commit 7889d747d9
3 changed files with 137 additions and 3 deletions

View File

@@ -0,0 +1,88 @@
<?php
use App\Domains\Menu\Models\Menu;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
$now = now();
DB::table('menues')->updateOrInsert(
['code' => 'account'],
[
'parent_menu_code' => null,
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
'static_content_schema' => null,
'route' => '/mi-cuenta',
'created_at' => $now,
'updated_at' => $now,
]
);
$routes = [
'profile' => '/mi-cuenta/datos-personales',
'purchases' => '/mi-cuenta/compras',
'tickets' => '/mi-cuenta/tickets',
];
foreach ($routes as $code => $route) {
DB::table('menues')
->where('code', $code)
->update([
'parent_menu_code' => 'account',
'route' => $route,
'updated_at' => $now,
]);
}
$tenantCodes = DB::table('tenants_menues')
->whereIn('menu_code', array_keys($routes))
->distinct()
->pluck('tenant_code');
foreach ($tenantCodes as $tenantCode) {
$alreadyAssigned = DB::table('tenants_menues')
->where('tenant_code', $tenantCode)
->where('menu_code', 'account')
->exists();
if ($alreadyAssigned) {
continue;
}
DB::table('tenants_menues')->insert([
'tenant_code' => $tenantCode,
'menu_code' => 'account',
'static_content' => null,
'created_at' => $now,
'updated_at' => $now,
]);
}
}
public function down(): void
{
$now = now();
$routes = [
'profile' => '/profile',
'purchases' => '/purchases',
'tickets' => '/tickets',
];
foreach ($routes as $code => $route) {
DB::table('menues')
->where('code', $code)
->update([
'parent_menu_code' => null,
'route' => $route,
'updated_at' => $now,
]);
}
DB::table('tenants_menues')->where('menu_code', 'account')->delete();
DB::table('menues')->where('code', 'account')->delete();
}
};

View File

@@ -17,9 +17,26 @@ class MenuSeeder extends Seeder
['code' => 'index', 'route' => '/'],
['code' => 'product.detail', 'route' => '/product/:id'],
['code' => 'checkout', 'route' => '/checkout'],
['code' => 'profile', 'route' => '/profile'],
['code' => 'purchases', 'route' => '/purchases'],
['code' => 'tickets', 'route' => '/tickets'],
[
'code' => 'account',
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
'route' => '/mi-cuenta',
],
[
'code' => 'profile',
'parent_menu_code' => 'account',
'route' => '/mi-cuenta/datos-personales',
],
[
'code' => 'purchases',
'parent_menu_code' => 'account',
'route' => '/mi-cuenta/compras',
],
[
'code' => 'tickets',
'parent_menu_code' => 'account',
'route' => '/mi-cuenta/tickets',
],
[
'code' => 'help',
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,