feat(tenant): implement TenantProvisioningService and OnTicketTenantSeeder for tenant management

This commit is contained in:
2026-09-21 16:44:57 -03:00
parent d33b435ba5
commit f5f4cb4e87
6 changed files with 302 additions and 95 deletions

View File

@@ -3,10 +3,8 @@
namespace Database\Seeders;
use App\Domains\Core\Client\Models\Client;
use App\Domains\Core\Tenant\Models\AdminWebsiteType;
use App\Domains\Core\Tenant\Models\Tenant;
use App\Domains\Core\Tenant\Services\TenantService;
use App\Domains\Core\Tenant\Services\WebsiteExtraService;
use App\Domains\Core\Tenant\Services\TenantProvisioningService;
use App\Shared\Attachable\Models\Attachment;
use App\Shared\Attachable\Services\AttachmentService;
use Illuminate\Database\Seeder;
@@ -16,8 +14,6 @@ use Throwable;
class TenantSeeder extends Seeder
{
private const ONTICKET_CLIENT_CODE = 'onticket';
private const PYME_RURAL_CLIENT_CODE = 'pyme_rural';
private const SONDER_CLIENT_CODE = 'sonder';
@@ -46,8 +42,7 @@ class TenantSeeder extends Seeder
];
public function __construct(
protected TenantService $tenantService,
protected WebsiteExtraService $websiteExtraService,
protected TenantProvisioningService $tenantService,
) {}
public function run(): void
@@ -57,89 +52,12 @@ class TenantSeeder extends Seeder
['name' => 'Sonder'],
);
$onTicketClient = Client::query()->firstOrCreate(
['code' => self::ONTICKET_CLIENT_CODE],
['name' => 'OnTicket'],
);
$pymeRuralClient = Client::query()->updateOrCreate(
['code' => self::PYME_RURAL_CLIENT_CODE],
['name' => 'Pyme Rural'],
);
$onTicketType = AdminWebsiteType::query()->where('codigo', 'onticket')->firstOrFail();
$onTicketTenant = Tenant::query()->where('codigo', 'onticket')->first();
if ($onTicketTenant === null) {
$this->tenantService->create([
'client_id' => $onTicketClient->id,
'codigo' => 'onticket',
'nombre' => $onTicketType->nombre,
'dominio' => $onTicketType->dominio,
'site_title' => $onTicketType->site_title,
'primary_color' => $onTicketType->primary_color,
'secondary_color' => $onTicketType->secondary_color,
'danger_color' => $onTicketType->danger_color,
'success_color' => $onTicketType->success_color,
'header_bg_color' => $onTicketType->surface_color,
'footer_bg_color' => $onTicketType->primary_color,
'display_categories' => true,
'display_seach_bar' => true,
'admin_website_type_code' => $onTicketType->codigo,
'storefront_website_type_code' => 'onticket_multi_event',
'header_logo' => $this->uploadedImage(
'images/tennants/onticket/onticket_logo.png',
'onticket_logo.png',
),
'footer_logo' => $this->uploadedImage(
'images/tennants/onticket/onticket_footer_logo.png',
'onticket_footer_logo.png',
),
'favicon' => $this->uploadedImage(
'images/tennants/onticket/onticket_favicon.svg',
'onticket_favicon.svg',
),
'header_bg_image' => $this->uploadedImage(
'images/tennants/onticket/onticket_header_background.png',
'onticket_header_background.png',
),
]);
} elseif ($onTicketTenant->header_bg_image_id === null) {
$this->tenantService->update($onTicketTenant, [
'header_bg_image' => $this->uploadedImage(
'images/tennants/onticket/onticket_header_background.png',
'onticket_header_background.png',
),
]);
}
if ($onTicketTenant !== null && $onTicketTenant->storefront_website_type_code === 'onticket') {
$onTicketTenant->update(['storefront_website_type_code' => 'onticket_multi_event']);
}
$onTicketTenant = Tenant::query()->where('codigo', 'onticket')->firstOrFail();
foreach (['Música', 'Teatro', 'Deportes', 'Infantiles', 'Otros'] as $nombre) {
$onTicketTenant->eventCategories()->firstOrCreate(['nombre' => $nombre]);
}
if ($onTicketTenant->storefront_website_type_code === 'onticket_multi_event' && ! $onTicketTenant->display_seach_bar) {
$onTicketTenant->update(['display_seach_bar' => true]);
}
if (
$onTicketTenant->storefront_website_type_code === 'onticket_multi_event'
&& ! $onTicketTenant->websiteExtras()->whereHas('websiteTypeExtra', fn ($query) => $query->where('codigo', 'immersiveHero'))->exists()
) {
$this->websiteExtraService->updateForTenant($onTicketTenant, 'immersiveHero', [
'eyebrow' => 'Encendé tu',
'title' => 'experiencia',
'description' => 'Reservá tu entrada y formá parte',
]);
}
$this->call(OnticketImmersiveHeroCarouselSeeder::class);
$this->call(OnTicketTenantSeeder::class);
$this->deleteTenant('sonder');