From 68dd373d619d72e146900b7ca508a42af4a3a0cc Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 11 Aug 2026 10:04:18 -0300 Subject: [PATCH] feat(tenant): add display options for categories and search bar; update requests, migrations, seeder, and tests --- app/Domains/Tenant/Models/Tenant.php | 6 +++++ .../Tenant/Requests/StoreTenantRequest.php | 2 ++ .../Tenant/Requests/UpdateTenantRequest.php | 2 ++ .../Tenant/Resources/TenantResource.php | 2 ++ ...eader_display_options_to_tenants_table.php | 23 ++++++++++++++++ ...der_display_options_for_seeded_tenants.php | 26 +++++++++++++++++++ database/seeders/TenantSeeder.php | 4 +++ .../Tenant/BootstrapTenantControllerTest.php | 4 +++ 8 files changed, 69 insertions(+) create mode 100644 database/migrations/2026_08_11_000000_add_header_display_options_to_tenants_table.php create mode 100644 database/migrations/2026_08_11_000100_configure_header_display_options_for_seeded_tenants.php diff --git a/app/Domains/Tenant/Models/Tenant.php b/app/Domains/Tenant/Models/Tenant.php index ab4cd5d..0013a9c 100644 --- a/app/Domains/Tenant/Models/Tenant.php +++ b/app/Domains/Tenant/Models/Tenant.php @@ -33,6 +33,8 @@ use Illuminate\Database\Eloquent\Relations\HasMany; 'search_product_layout', 'search_group_layout', 'search_items_per_page', + 'display_categories', + 'display_seach_bar', 'event_title', 'event_location', 'event_date_text', @@ -45,6 +47,8 @@ class Tenant extends Model 'search_product_layout' => ProductLayout::ColumnWithImage->value, 'search_group_layout' => GroupLayout::Paginated->value, 'search_items_per_page' => 12, + 'display_categories' => true, + 'display_seach_bar' => true, ]; public function getRouteKeyName(): string @@ -63,6 +67,8 @@ class Tenant extends Model 'search_product_layout' => ProductLayout::class, 'search_group_layout' => GroupLayout::class, 'search_items_per_page' => 'integer', + 'display_categories' => 'boolean', + 'display_seach_bar' => 'boolean', ]; } diff --git a/app/Domains/Tenant/Requests/StoreTenantRequest.php b/app/Domains/Tenant/Requests/StoreTenantRequest.php index 7485980..88d398d 100644 --- a/app/Domains/Tenant/Requests/StoreTenantRequest.php +++ b/app/Domains/Tenant/Requests/StoreTenantRequest.php @@ -75,6 +75,8 @@ class StoreTenantRequest extends FormRequest 'search_product_layout' => ['sometimes', Rule::enum(ProductLayout::class)], 'search_group_layout' => ['sometimes', Rule::enum(GroupLayout::class)], 'search_items_per_page' => ['sometimes', 'integer', 'min:4', 'max:48'], + 'display_categories' => ['sometimes', 'boolean'], + 'display_seach_bar' => ['sometimes', 'boolean'], 'website_type_code' => [ 'required_with:extras', 'sometimes', diff --git a/app/Domains/Tenant/Requests/UpdateTenantRequest.php b/app/Domains/Tenant/Requests/UpdateTenantRequest.php index c860586..dec65d9 100644 --- a/app/Domains/Tenant/Requests/UpdateTenantRequest.php +++ b/app/Domains/Tenant/Requests/UpdateTenantRequest.php @@ -85,6 +85,8 @@ class UpdateTenantRequest extends FormRequest 'search_product_layout' => ['sometimes', Rule::enum(ProductLayout::class)], 'search_group_layout' => ['sometimes', Rule::enum(GroupLayout::class)], 'search_items_per_page' => ['sometimes', 'integer', 'min:4', 'max:48'], + 'display_categories' => ['sometimes', 'boolean'], + 'display_seach_bar' => ['sometimes', 'boolean'], ]; } } diff --git a/app/Domains/Tenant/Resources/TenantResource.php b/app/Domains/Tenant/Resources/TenantResource.php index f022ea1..c4251a9 100644 --- a/app/Domains/Tenant/Resources/TenantResource.php +++ b/app/Domains/Tenant/Resources/TenantResource.php @@ -61,6 +61,8 @@ class TenantResource extends JsonResource 'search_product_layout' => $this->search_product_layout->value, 'search_group_layout' => $this->search_group_layout->value, 'search_items_per_page' => $this->search_items_per_page, + 'display_categories' => $this->display_categories, + 'display_seach_bar' => $this->display_seach_bar, 'social_media' => $this->whenLoaded( 'socialMedia', fn () => $this->socialMedia diff --git a/database/migrations/2026_08_11_000000_add_header_display_options_to_tenants_table.php b/database/migrations/2026_08_11_000000_add_header_display_options_to_tenants_table.php new file mode 100644 index 0000000..4e49f56 --- /dev/null +++ b/database/migrations/2026_08_11_000000_add_header_display_options_to_tenants_table.php @@ -0,0 +1,23 @@ +boolean('display_categories')->default(true)->after('search_items_per_page'); + $table->boolean('display_seach_bar')->default(true)->after('display_categories'); + }); + } + + public function down(): void + { + Schema::table('tenants', function (Blueprint $table): void { + $table->dropColumn(['display_categories', 'display_seach_bar']); + }); + } +}; diff --git a/database/migrations/2026_08_11_000100_configure_header_display_options_for_seeded_tenants.php b/database/migrations/2026_08_11_000100_configure_header_display_options_for_seeded_tenants.php new file mode 100644 index 0000000..98d112a --- /dev/null +++ b/database/migrations/2026_08_11_000100_configure_header_display_options_for_seeded_tenants.php @@ -0,0 +1,26 @@ +where('codigo', 'fiesta_futbol_infantil') + ->update([ + 'display_categories' => false, + 'display_seach_bar' => false, + ]); + + DB::table('tenants') + ->where('codigo', 'sonder') + ->update([ + 'display_categories' => true, + 'display_seach_bar' => true, + ]); + } + + public function down(): void {} +}; diff --git a/database/seeders/TenantSeeder.php b/database/seeders/TenantSeeder.php index 474fe0b..3721fc5 100644 --- a/database/seeders/TenantSeeder.php +++ b/database/seeders/TenantSeeder.php @@ -56,6 +56,8 @@ class TenantSeeder extends Seeder 'success_color' => '#198754', 'header_bg_color' => '#ffffff', 'footer_bg_color' => '#313131', + 'display_categories' => true, + 'display_seach_bar' => true, 'header_logo' => $this->uploadedImage('images/tennants/sonder/sonder_header.png', 'sonder_header.png'), 'footer_logo' => $this->uploadedImage('images/tennants/sonder/sonder_footer.png', 'sonder_footer.png'), 'social_media' => self::SOCIAL_MEDIA, @@ -107,6 +109,8 @@ class TenantSeeder extends Seeder 'success_color' => '#198754', 'header_bg_color' => '#ffffff', 'footer_bg_color' => '#015327', + 'display_categories' => false, + 'display_seach_bar' => false, 'header_logo' => $this->uploadedImage( 'images/tennants/fiesta_futbol_infantil/futbol_infantil_header.png', 'futbol_infantil_header.png', diff --git a/tests/Feature/Tenant/BootstrapTenantControllerTest.php b/tests/Feature/Tenant/BootstrapTenantControllerTest.php index 37c9140..66dc046 100644 --- a/tests/Feature/Tenant/BootstrapTenantControllerTest.php +++ b/tests/Feature/Tenant/BootstrapTenantControllerTest.php @@ -53,6 +53,8 @@ class BootstrapTenantControllerTest extends TestCase 'header_logo_id' => $headerAttachment->id, 'footer_logo_id' => $footerAttachment->id, 'event_date_text' => '9, 10, 11 y 12 de Octubre 2026', + 'display_categories' => false, + 'display_seach_bar' => false, ]); $response = $this->getJson('/api/tenants/bootstrap/acme.com'); @@ -66,6 +68,8 @@ class BootstrapTenantControllerTest extends TestCase ->assertJsonPath('data.danger_color', '#0000ff') ->assertJsonPath('data.success_color', '#00ff00') ->assertJsonPath('data.event_date_text', '9, 10, 11 y 12 de Octubre 2026') + ->assertJsonPath('data.display_categories', false) + ->assertJsonPath('data.display_seach_bar', false) ->assertJsonPath('data.header_bg_color', '#ffffff')->assertJsonPath('data.footer_bg_color', '#ffffff'); $headerUrl = $response->json('data.header_logo');