feat(menus): assign event routes to OnTicket
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
private const TENANT_CODE = 'onticket';
|
||||
|
||||
private const EVENT_MENUS = [
|
||||
'event.index' => [
|
||||
'label' => 'Eventos',
|
||||
'route' => '/',
|
||||
],
|
||||
'event.detail' => [
|
||||
'label' => 'Detalle de evento',
|
||||
'route' => '/evento/:id',
|
||||
],
|
||||
];
|
||||
|
||||
private const EXCLUDED_MENU_CODES = [
|
||||
'product.detail',
|
||||
'help',
|
||||
'help.faq',
|
||||
'help.contact',
|
||||
'help.payment-methods',
|
||||
'help.shipping',
|
||||
'help.terms-and-conditions',
|
||||
'adminapp.tickets',
|
||||
'adminapp.fiesta-futbol-infantil.entradas',
|
||||
'adminapp.fiesta-futbol-infantil.alojamientos',
|
||||
'adminapp.fiesta-futbol-infantil.merchandising',
|
||||
'adminapp.fiesta-futbol-infantil.comida',
|
||||
'adminapp.desfile.entradas',
|
||||
];
|
||||
|
||||
public function up(): void
|
||||
{
|
||||
$now = now();
|
||||
|
||||
DB::transaction(function () use ($now): void {
|
||||
foreach (self::EVENT_MENUS as $code => $menu) {
|
||||
DB::table('menues')->updateOrInsert(
|
||||
['code' => $code],
|
||||
[
|
||||
'label' => $menu['label'],
|
||||
'parent_menu_code' => null,
|
||||
'content_type' => 'dynamic',
|
||||
'static_content_schema' => null,
|
||||
'route' => $menu['route'],
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
DB::table('roles')
|
||||
->whereIn('codigo', ['admin', 'adminapp', 'user'])
|
||||
->pluck('codigo')
|
||||
->each(function (string $roleCode): void {
|
||||
foreach (array_keys(self::EVENT_MENUS) as $menuCode) {
|
||||
DB::table('roles_menues')->updateOrInsert([
|
||||
'rol_codigo' => $roleCode,
|
||||
'menu_codigo' => $menuCode,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
if (! DB::table('tenants')->where('codigo', self::TENANT_CODE)->exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
DB::table('menues')
|
||||
->whereNotIn('code', self::EXCLUDED_MENU_CODES)
|
||||
->pluck('code')
|
||||
->each(function (string $menuCode) use ($now): void {
|
||||
DB::table('tenants_menues')->updateOrInsert(
|
||||
[
|
||||
'tenant_code' => self::TENANT_CODE,
|
||||
'menu_code' => $menuCode,
|
||||
],
|
||||
[
|
||||
'static_content' => null,
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
],
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
DB::transaction(function (): void {
|
||||
$assignedMenuCodes = DB::table('menues')
|
||||
->whereNotIn('code', self::EXCLUDED_MENU_CODES)
|
||||
->pluck('code');
|
||||
|
||||
DB::table('tenants_menues')
|
||||
->where('tenant_code', self::TENANT_CODE)
|
||||
->whereIn('menu_code', $assignedMenuCodes)
|
||||
->delete();
|
||||
|
||||
DB::table('roles_menues')
|
||||
->whereIn('menu_codigo', array_keys(self::EVENT_MENUS))
|
||||
->delete();
|
||||
|
||||
DB::table('menues')
|
||||
->whereIn('code', array_keys(self::EVENT_MENUS))
|
||||
->delete();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -17,6 +17,12 @@ class MenuSeeder extends Seeder
|
||||
{
|
||||
$menus = [
|
||||
['code' => 'index', 'label' => 'Inicio', 'route' => '/'],
|
||||
['code' => 'event.index', 'label' => 'Eventos', 'route' => '/'],
|
||||
[
|
||||
'code' => 'event.detail',
|
||||
'label' => 'Detalle de evento',
|
||||
'route' => '/evento/:id',
|
||||
],
|
||||
[
|
||||
'code' => 'product.detail',
|
||||
'label' => 'Detalle de producto',
|
||||
@@ -291,6 +297,10 @@ class MenuSeeder extends Seeder
|
||||
$desfileMenuCodes = [
|
||||
'adminapp.desfile.entradas',
|
||||
];
|
||||
$onTicketMenuCodes = [
|
||||
'event.index',
|
||||
'event.detail',
|
||||
];
|
||||
$frequentlyAskedQuestions = [
|
||||
[
|
||||
'pregunta' => '¿Hay algún límite de compra?',
|
||||
@@ -358,6 +368,10 @@ class MenuSeeder extends Seeder
|
||||
$menuCodes = array_diff($menuCodes, $desfileMenuCodes);
|
||||
}
|
||||
|
||||
if ($tenant->codigo !== 'onticket') {
|
||||
$menuCodes = array_diff($menuCodes, $onTicketMenuCodes);
|
||||
}
|
||||
|
||||
// Usar sync para asociar los menues al tenant
|
||||
$tenant->menues()->sync($menuCodes);
|
||||
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
namespace Tests\Feature\Seeders;
|
||||
|
||||
use App\Shared\Attachable\Enums\AttachmentType;
|
||||
use App\Shared\Attachable\Models\Attachment;
|
||||
use App\Domains\Core\Authorization\Enums\RoleCode;
|
||||
use App\Domains\Core\Authorization\Models\Role;
|
||||
use App\Domains\Core\Menu\Models\Menu;
|
||||
use App\Domains\Core\Tenant\Models\Tenant;
|
||||
use App\Shared\Attachable\Enums\AttachmentType;
|
||||
use App\Shared\Attachable\Models\Attachment;
|
||||
use Database\Seeders\AuthorizationSeeder;
|
||||
use Database\Seeders\MenuSeeder;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
@@ -183,6 +183,34 @@ class MenuSeederTest extends TestCase
|
||||
);
|
||||
}
|
||||
|
||||
public function test_it_assigns_event_menus_only_to_onticket(): void
|
||||
{
|
||||
$onTicket = $this->createTenant('onticket');
|
||||
$otherTenant = $this->createTenant('other');
|
||||
|
||||
$this->seed(AuthorizationSeeder::class);
|
||||
$this->seed(MenuSeeder::class);
|
||||
|
||||
foreach ([
|
||||
'event.index' => '/',
|
||||
'event.detail' => '/evento/:id',
|
||||
] as $code => $route) {
|
||||
$menu = Menu::query()->where('code', $code)->firstOrFail();
|
||||
|
||||
$this->assertSame($route, $menu->route);
|
||||
$this->assertTrue($onTicket->menues()->where('menues.code', $code)->exists());
|
||||
$this->assertFalse($otherTenant->menues()->where('menues.code', $code)->exists());
|
||||
$this->assertTrue(
|
||||
Role::query()
|
||||
->where('codigo', RoleCode::User->value)
|
||||
->firstOrFail()
|
||||
->menus()
|
||||
->where('menues.code', $code)
|
||||
->exists()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function test_it_seeds_the_account_menu_hierarchy(): void
|
||||
{
|
||||
$tenant = $this->createTenant('account_tenant');
|
||||
|
||||
Reference in New Issue
Block a user