From 8d8e49fcfbc93c0dc35b94bc51a1e478aec58e75 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 11 Aug 2026 09:49:59 -0300 Subject: [PATCH] feat(event): implement automatic tenant date text synchronization on save and delete; update related tests --- app/Domains/Event/Models/EventDate.php | 22 +++++++++++++++ app/Domains/Event/Services/EventService.php | 5 ---- app/Domains/Tenant/Models/WebsiteExtra.php | 4 +++ ...ault_website_extras_is_enabled_to_true.php | 27 +++++++++++++++++++ .../FiestaFutbolInfantilProductSeederTest.php | 2 ++ 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 database/migrations/2026_08_11_120000_default_website_extras_is_enabled_to_true.php diff --git a/app/Domains/Event/Models/EventDate.php b/app/Domains/Event/Models/EventDate.php index c89bb72..ce0ede9 100644 --- a/app/Domains/Event/Models/EventDate.php +++ b/app/Domains/Event/Models/EventDate.php @@ -3,6 +3,7 @@ namespace App\Domains\Event\Models; use App\Domains\Catalog\Models\Variant; +use App\Domains\Event\Services\EventDateTextFormatter; use App\Domains\Tenant\Models\Tenant; use Carbon\CarbonInterface; use Illuminate\Database\Eloquent\Attributes\Fillable; @@ -25,6 +26,12 @@ class EventDate extends Model public $timestamps = false; + protected static function booted(): void + { + static::saved(fn (self $eventDate) => $eventDate->syncTenantDateText()); + static::deleted(fn (self $eventDate) => $eventDate->syncTenantDateText()); + } + protected function casts(): array { return [ @@ -64,4 +71,19 @@ class EventDate extends Model { return Carbon::parse($this->date->format('Y-m-d').' '.$this->time_end); } + + private function syncTenantDateText(): void + { + $tenant = $this->tenant()->first(); + + if (! $tenant) { + return; + } + + $tenant->update([ + 'event_date_text' => app(EventDateTextFormatter::class)->format( + $tenant->eventDates()->pluck('date') + ), + ]); + } } diff --git a/app/Domains/Event/Services/EventService.php b/app/Domains/Event/Services/EventService.php index 4ec12e4..793d546 100644 --- a/app/Domains/Event/Services/EventService.php +++ b/app/Domains/Event/Services/EventService.php @@ -13,8 +13,6 @@ class EventService 'facebook_url' => 'facebook', ]; - public function __construct(protected EventDateTextFormatter $eventDateTextFormatter) {} - public function forTenant(Tenant $tenant): Tenant { return $tenant->load(['eventDates', 'socialMedia']); @@ -28,9 +26,6 @@ class EventService $tenant->update([ 'event_title' => $data['title'], 'event_location' => $data['location'], - 'event_date_text' => $this->eventDateTextFormatter->format( - array_column($data['dates'], 'date') - ), ]); $this->syncDates($tenant, $data['dates']); diff --git a/app/Domains/Tenant/Models/WebsiteExtra.php b/app/Domains/Tenant/Models/WebsiteExtra.php index 3656fba..2698dc2 100644 --- a/app/Domains/Tenant/Models/WebsiteExtra.php +++ b/app/Domains/Tenant/Models/WebsiteExtra.php @@ -19,6 +19,10 @@ class WebsiteExtra extends Model protected $table = 'websites_extras'; + protected $attributes = [ + 'is_enabled' => true, + ]; + private mixed $resolvedConfig = null; private bool $hasResolvedConfig = false; diff --git a/database/migrations/2026_08_11_120000_default_website_extras_is_enabled_to_true.php b/database/migrations/2026_08_11_120000_default_website_extras_is_enabled_to_true.php new file mode 100644 index 0000000..b0a051a --- /dev/null +++ b/database/migrations/2026_08_11_120000_default_website_extras_is_enabled_to_true.php @@ -0,0 +1,27 @@ +whereNull('is_enabled') + ->update(['is_enabled' => true]); + + Schema::table('websites_extras', function (Blueprint $table): void { + $table->boolean('is_enabled')->default(true)->nullable(false)->change(); + }); + } + + public function down(): void + { + Schema::table('websites_extras', function (Blueprint $table): void { + $table->boolean('is_enabled')->nullable()->default(null)->change(); + }); + } +}; diff --git a/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php b/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php index 2105431..615c30e 100644 --- a/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php +++ b/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php @@ -42,6 +42,8 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase $this->seed([AttributeSeeder::class, FiestaFutbolInfantilProductSeeder::class]); $this->seed([AttributeSeeder::class, FiestaFutbolInfantilProductSeeder::class]); + $this->assertSame('9, 10, 11 y 12 de Octubre 2026', $tenant->fresh()->event_date_text); + $this->assertSame( ['color', 'event_date', 'horario', 'servicio', 'talle', 'tipo_alojamiento'], Attribute::query()->where('tenant_codigo', $tenant->codigo)->orderBy('codigo')->pluck('codigo')->all(),