245 lines
8.3 KiB
PHP
245 lines
8.3 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Domains\Attachable\Services\AttachmentService;
|
|
use App\Domains\Tenant\Models\Tenant;
|
|
use App\Domains\Tenant\Services\TenantService;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Http\UploadedFile;
|
|
|
|
class TenantSeeder extends Seeder
|
|
{
|
|
private const SONDER_MAIN_CAROUSEL_IMAGES = [
|
|
'01-urban-team.png',
|
|
'02-running-shoes.png',
|
|
'03-streetwear.png',
|
|
'04-football-training.png',
|
|
'05-activewear-essentials.png',
|
|
'06-city-runners.png',
|
|
];
|
|
|
|
private const SOCIAL_MEDIA = [
|
|
[
|
|
'code' => 'instagram',
|
|
'url' => 'https://www.instagram.com/sonderargentina/',
|
|
'orden' => 0,
|
|
],
|
|
[
|
|
'code' => 'facebook',
|
|
'url' => 'https://www.facebook.com/SonderArgentina/',
|
|
'orden' => 1,
|
|
],
|
|
[
|
|
'code' => 'linkedin',
|
|
'url' => 'https://www.linkedin.com/company/35664983/',
|
|
'orden' => 2,
|
|
],
|
|
[
|
|
'code' => 'whatsapp',
|
|
'url' => 'https://wa.me/5493412602222',
|
|
'orden' => 3,
|
|
],
|
|
];
|
|
|
|
public function __construct(protected TenantService $tenantService) {}
|
|
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
// Check if tenant 'sonder' already exists and delete it to prevent duplicates
|
|
$existing = Tenant::query()->where('codigo', 'sonder')->first();
|
|
if ($existing) {
|
|
$attachmentService = app(AttachmentService::class);
|
|
if ($existing->headerLogo) {
|
|
try {
|
|
$attachmentService->delete($existing->headerLogo);
|
|
} catch (\Throwable $e) {
|
|
// Ignore exception on cleanup
|
|
}
|
|
}
|
|
if ($existing->footerLogo && $existing->footer_logo_id !== $existing->header_logo_id) {
|
|
try {
|
|
$attachmentService->delete($existing->footerLogo);
|
|
} catch (\Throwable $e) {
|
|
// Ignore exception on cleanup
|
|
}
|
|
}
|
|
foreach ($existing->mainCarouselImages as $mainCarouselImage) {
|
|
try {
|
|
$attachmentService->delete($mainCarouselImage);
|
|
} catch (\Throwable $e) {
|
|
// Ignore exception on cleanup
|
|
}
|
|
}
|
|
$existing->delete();
|
|
}
|
|
|
|
// Check if domain 'localhost' is already in use by another tenant and delete it
|
|
$existingDomain = Tenant::query()->where('dominio', 'localhost')->first();
|
|
if ($existingDomain) {
|
|
$existingDomain->delete();
|
|
}
|
|
|
|
$headerImagePath = public_path('images/sonder_header.png');
|
|
$footerImagePath = public_path('images/sonder_footer.png');
|
|
|
|
if (! file_exists($headerImagePath)) {
|
|
throw new \RuntimeException("Image not found at path: {$headerImagePath}");
|
|
}
|
|
|
|
if (! file_exists($footerImagePath)) {
|
|
throw new \RuntimeException("Image not found at path: {$footerImagePath}");
|
|
}
|
|
|
|
$headerLogo = new UploadedFile(
|
|
$headerImagePath,
|
|
'sonder_header.png',
|
|
'image/png',
|
|
null,
|
|
true
|
|
);
|
|
|
|
$footerLogo = new UploadedFile(
|
|
$footerImagePath,
|
|
'sonder_footer.png',
|
|
'image/png',
|
|
null,
|
|
true
|
|
);
|
|
|
|
$mainCarouselImages = [];
|
|
foreach (self::SONDER_MAIN_CAROUSEL_IMAGES as $filename) {
|
|
$imagePath = public_path("images/sonder-main-carousel/{$filename}");
|
|
|
|
if (! file_exists($imagePath)) {
|
|
throw new \RuntimeException("Image not found at path: {$imagePath}");
|
|
}
|
|
|
|
$mainCarouselImages[] = new UploadedFile(
|
|
$imagePath,
|
|
$filename,
|
|
'image/png',
|
|
null,
|
|
true
|
|
);
|
|
}
|
|
|
|
$this->tenantService->create([
|
|
'codigo' => 'sonder',
|
|
'nombre' => 'Sonder',
|
|
'dominio' => 'localhost',
|
|
'primary_color' => '#6376F3',
|
|
'secondary_color' => '#A0A0A0',
|
|
'danger_color' => '#FF8888',
|
|
'success_color' => '#198754',
|
|
'header_bg_color' => '#ffffff',
|
|
'footer_bg_color' => '#313131',
|
|
'header_logo' => $headerLogo,
|
|
'footer_logo' => $footerLogo,
|
|
'main_carousel_images' => $mainCarouselImages,
|
|
'social_media' => self::SOCIAL_MEDIA,
|
|
]);
|
|
|
|
// Check if tenant 'fiesta_futbol_infantil' already exists
|
|
$existingFiesta = Tenant::query()->where('codigo', 'fiesta_futbol_infantil')->first();
|
|
if ($existingFiesta) {
|
|
$attachmentService = app(AttachmentService::class);
|
|
if ($existingFiesta->headerLogo) {
|
|
try {
|
|
$attachmentService->delete($existingFiesta->headerLogo);
|
|
} catch (\Throwable $e) {
|
|
}
|
|
}
|
|
if ($existingFiesta->footerLogo && $existingFiesta->footer_logo_id !== $existingFiesta->header_logo_id) {
|
|
try {
|
|
$attachmentService->delete($existingFiesta->footerLogo);
|
|
} catch (\Throwable $e) {
|
|
}
|
|
}
|
|
if ($existingFiesta->heroBgImage) {
|
|
try {
|
|
$attachmentService->delete($existingFiesta->heroBgImage);
|
|
} catch (\Throwable $e) {
|
|
}
|
|
}
|
|
$existingFiesta->delete();
|
|
}
|
|
|
|
$fiestaDomain = 'fiesta-futbol-infantil.localhost';
|
|
$existingFiestaDomain = Tenant::query()->where('dominio', $fiestaDomain)->first();
|
|
if ($existingFiestaDomain) {
|
|
$existingFiestaDomain->delete();
|
|
}
|
|
|
|
$fiestaHeaderImagePath = public_path('images/futbol_infantil_header.png');
|
|
$fiestaFooterImagePath = public_path('images/futbol_infantil_footer.png');
|
|
$fiestaHeroBgImagePath = public_path('images/futbol_infantil_hero.jpg');
|
|
|
|
if (! file_exists($fiestaHeaderImagePath)) {
|
|
throw new \RuntimeException("Image not found at path: {$fiestaHeaderImagePath}");
|
|
}
|
|
|
|
if (! file_exists($fiestaFooterImagePath)) {
|
|
throw new \RuntimeException("Image not found at path: {$fiestaFooterImagePath}");
|
|
}
|
|
|
|
if (! file_exists($fiestaHeroBgImagePath)) {
|
|
throw new \RuntimeException("Image not found at path: {$fiestaHeroBgImagePath}");
|
|
}
|
|
|
|
$fiestaHeaderLogo = new UploadedFile(
|
|
$fiestaHeaderImagePath,
|
|
'futbol_infantil_header.png',
|
|
'image/png',
|
|
null,
|
|
true
|
|
);
|
|
|
|
$fiestaFooterLogo = new UploadedFile(
|
|
$fiestaFooterImagePath,
|
|
'futbol_infantil_footer.png',
|
|
'image/png',
|
|
null,
|
|
true
|
|
);
|
|
|
|
$fiestaHeroBgImage = new UploadedFile(
|
|
$fiestaHeroBgImagePath,
|
|
'futbol_infantil_hero.jpg',
|
|
'image/jpeg',
|
|
null,
|
|
true
|
|
);
|
|
|
|
$this->tenantService->create([
|
|
'codigo' => 'fiesta_futbol_infantil',
|
|
'nombre' => 'Fiesta Fútbol Infantil',
|
|
'dominio' => $fiestaDomain,
|
|
'primary_color' => '#00973F',
|
|
'secondary_color' => '#A0A0A0',
|
|
'danger_color' => '#FF8888',
|
|
'success_color' => '#198754',
|
|
'header_bg_color' => '#ffffff',
|
|
'footer_bg_color' => '#015327',
|
|
'header_logo' => $fiestaHeaderLogo,
|
|
'footer_logo' => $fiestaFooterLogo,
|
|
'hero_bg_image' => $fiestaHeroBgImage,
|
|
'hero_config' => [
|
|
'title_html' => '<strong>ASEGURÁ TU LUGAR</strong>',
|
|
'description_html' => '<strong>Comprá tu entrada oficial en segundos</strong> de forma 100% segura. Preparate para vivir la experiencia completa.',
|
|
'button_text' => 'Quiero mi entrada',
|
|
'button_href' => null,
|
|
],
|
|
'event_config' => [
|
|
'title' => 'FIESTA NACIONAL DEL FÚTBOL INFANTIL',
|
|
'location' => 'Sunchales, Santa Fe',
|
|
'dates' => ['2026-10-09', '2026-10-10', '2026-10-11', '2026-10-12'],
|
|
],
|
|
'social_media' => self::SOCIAL_MEDIA,
|
|
]);
|
|
}
|
|
}
|