seedSiteSettings(); $this->seedServices(); $this->seedPortfolioCases(); $this->seedTestimonials(); } private function seedSiteSettings(): void { SiteSetting::query()->updateOrCreate([], [ 'brand_name' => 'Amare Assessoria', 'hero_eyebrow' => 'Assessoria de eventos', 'hero_title' => 'Celebrações com propósito', 'hero_subtitle' => 'Planejamento completo para casamentos e eventos corporativos em Fortaleza.', 'hero_cta_label' => 'Solicitar orçamento', 'about_summary' => 'Assessoria boutique especializada em experiências memoráveis.', 'email' => 'contato@amare.local', 'phone' => '(85) 99999-9999', 'city' => 'Fortaleza, CE', 'social_links' => [ 'instagram' => 'https://instagram.com/amare', ], 'default_meta_title' => 'Amare Assessoria de Eventos', 'default_meta_description' => 'Assessoria premium para casamentos e eventos corporativos.', 'default_og_image_path' => $this->copyFixture('og-default.jpg', 'content/og/og-default.jpg'), 'default_og_image_alt' => 'Identidade visual da Amare Assessoria de Eventos', 'analytics_enabled' => false, 'analytics_script' => null, ]); } private function seedServices(): void { $services = [ [ 'title' => 'Casamentos', 'slug' => 'casamentos', 'summary' => 'Planejamento completo do grande dia.', 'description' => 'Do briefing ao último brinde, cuidamos de cada detalhe do casamento.', 'sort_order' => 1, 'is_featured' => true, ], [ 'title' => 'Eventos corporativos', 'slug' => 'eventos-corporativos', 'summary' => 'Experiências alinhadas à marca.', 'description' => 'Lançamentos, convenções e encontros corporativos com operação impecável.', 'sort_order' => 2, 'is_featured' => true, ], [ 'title' => 'Celebrações intimistas', 'slug' => 'celebracoes-intimistas', 'summary' => 'Encontros especiais em escala reduzida.', 'description' => 'Aniversários, mini weddings e jantares com curadoria editorial.', 'sort_order' => 3, 'is_featured' => false, ], ]; foreach ($services as $service) { Service::query()->updateOrCreate( ['slug' => $service['slug']], [ ...$service, 'cover_image_path' => $this->copyFixture('service-cover.jpg', 'content/services/'.$service['slug'].'.jpg'), 'cover_image_alt' => 'Capa do serviço '.$service['title'], 'published_at' => Carbon::parse(self::SEED_TIMESTAMP), ], ); } } private function seedPortfolioCases(): void { $cases = [ [ 'title' => 'Casamento Ana e Lucas', 'slug' => 'casamento-ana-lucas', 'summary' => 'Cerimônia ao ar livre em Fortaleza.', 'event_type' => 'Casamento', 'city' => 'Fortaleza', 'venue' => 'Espaço Jardim Atlântico', 'event_date' => '2025-11-20', 'challenge' => 'Integrar cerimônia e recepção em áreas distintas.', 'solution' => 'Operação sincronizada com sinalização e timing detalhado.', 'result' => 'Experiência fluida para 180 convidados.', 'sort_order' => 1, ], [ 'title' => 'Lançamento Verano', 'slug' => 'lancamento-verano', 'summary' => 'Evento corporativo de lançamento de coleção.', 'event_type' => 'Corporativo', 'city' => 'Fortaleza', 'venue' => 'Centro de Convenções', 'event_date' => '2025-09-10', 'challenge' => 'Ativar marca em ambiente multiestação.', 'solution' => 'Fluxo de convidados e fornecedores com cronograma minuto a minuto.', 'result' => 'Alta percepção de marca e cobertura de imprensa.', 'sort_order' => 2, ], [ 'title' => 'Mini wedding Marina', 'slug' => 'mini-wedding-marina', 'summary' => 'Celebração intimista à beira-mar.', 'event_type' => 'Mini wedding', 'city' => 'Caucaia', 'venue' => 'Pousada da Praia', 'event_date' => '2025-06-02', 'challenge' => 'Clima e logística em área externa.', 'solution' => 'Plano B estruturado e fornecedores locais alinhados.', 'result' => 'Cerimônia emocionante com 40 convidados.', 'sort_order' => 3, ], ]; foreach ($cases as $caseData) { $case = PortfolioCase::query()->updateOrCreate( ['slug' => $caseData['slug']], [ ...$caseData, 'cover_image_path' => $this->copyFixture('portfolio-cover.jpg', 'content/portfolio/'.$caseData['slug'].'-cover.jpg'), 'cover_image_alt' => 'Capa do caso '.$caseData['title'], 'is_featured' => true, 'published_at' => Carbon::parse(self::SEED_TIMESTAMP), ], ); PortfolioImage::query()->where('portfolio_case_id', $case->id)->delete(); foreach ([1, 2] as $index) { PortfolioImage::query()->create([ 'portfolio_case_id' => $case->id, 'path' => $this->copyFixture('gallery.jpg', 'content/portfolio/'.$caseData['slug'].'-gallery-'.$index.'.jpg'), 'alt_text' => 'Galeria '.$caseData['title'].' '.$index, 'caption' => $index === 1 ? 'Detalhe da decoração' : null, 'sort_order' => $index, ]); } } } private function seedTestimonials(): void { $testimonials = [ [ 'quote' => 'A Amare transformou nosso casamento em uma experiência inesquecível.', 'author_name' => 'Ana Souza', 'context' => 'Noiva', 'sort_order' => 1, 'is_featured' => true, ], [ 'quote' => 'Profissionalismo do início ao fim no lançamento da nossa coleção.', 'author_name' => 'Marcos Lima', 'context' => 'Diretor de marketing', 'sort_order' => 2, 'is_featured' => true, ], [ 'quote' => 'Cuidaram de cada detalhe com sensibilidade e precisão.', 'author_name' => 'Marina Costa', 'context' => 'Anfitriã', 'sort_order' => 3, 'is_featured' => false, ], ]; foreach ($testimonials as $testimonial) { Testimonial::query()->updateOrCreate( [ 'author_name' => $testimonial['author_name'], 'quote' => $testimonial['quote'], ], [ ...$testimonial, 'photo_path' => $this->copyFixture('testimonial.jpg', 'content/testimonials/'.str($testimonial['author_name'])->slug().'.jpg'), 'photo_alt' => 'Foto de '.$testimonial['author_name'], 'published_at' => Carbon::parse(self::SEED_TIMESTAMP), ], ); } } private function copyFixture(string $fixtureName, string $destination): string { $source = base_path('tests/fixtures/images/'.$fixtureName); Storage::disk('public')->put($destination, File::get($source)); return $destination; } }