seedSiteSettings(); $this->seedServices(); $this->seedPortfolioCases(); $this->seedTestimonials(); } private function seedSiteSettings(): void { SiteSetting::query()->updateOrCreate([], [ 'brand_name' => 'Amare Assessoria', 'hero_eyebrow' => 'Assessoria e produção de eventos · São Paulo', 'hero_title' => 'Celebrações com propósito', 'hero_subtitle' => 'Planejamento completo para casamentos e eventos corporativos em São Paulo.', 'hero_cta_label' => 'Solicitar proposta', 'hero_secondary_cta_label' => 'Conheça nosso olhar', 'hero_note' => 'Planejamento cuidadoso, comunicação clara e execução segura — do primeiro encontro ao último detalhe.', 'about_summary' => 'Assessoria boutique especializada em experiências memoráveis em São Paulo.', 'manifesto_title' => 'Sofisticação que também se traduz em organização.', 'manifesto_lead' => 'Um evento memorável não nasce apenas de uma boa estética. Ele depende de decisões bem conduzidas, fornecedores alinhados e atenção constante ao que realmente importa.', 'manifesto_body' => 'A Amare combina sensibilidade e precisão para criar encontros coerentes com cada cliente, marca e ocasião — sem fórmulas prontas, excessos ou ruído.', 'method_intro' => 'Clareza em cada etapa. Tranquilidade durante todo o processo.', 'method_steps' => SiteSetting::defaultMethodSteps(), 'principles' => SiteSetting::defaultPrinciples(), 'email' => 'amareassessoriaeventos@gmail.com', 'phone' => '(11) 99999-9999', 'city' => 'São Paulo - SP', 'social_links' => [ 'instagram' => 'https://instagram.com/amare', ], 'default_meta_title' => 'Amare Assessoria de Eventos', 'default_meta_description' => 'Assessoria premium para casamentos e eventos corporativos em São Paulo.', '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 São Paulo.', 'event_type' => 'Casamento', 'city' => 'São Paulo', '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' => 'São Paulo', '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 em São Paulo.', 'event_type' => 'Mini wedding', 'city' => 'São Paulo', 'venue' => 'Espaço intimista', '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 { // Real couples from depoimentos.md. Production publication still requires // explicit couple authorization before setting published_at outside local/demo seeds. $testimonials = [ [ 'quote' => "Mi, quero agradecer você e a sua equipe por todo empenho, atenção, vocês são abençoadas.\n\nEra nítida sua preocupação em garantir que todos os detalhes planejados desta comemoração, fossem atendidos.\n\nQue você possa transformar o grande dia das noivinhas sempre com essa sua leveza!!!\n\nMuito obrigada!", 'author_name' => 'Jeniffer e Maick', 'context' => 'Casamento · 06/12/2025', 'sort_order' => 1, 'is_featured' => true, ], [ 'quote' => "Mi, eu não tenho palavras pra agradecer você e tudo que você fez por mim e por nós na realização desse sonho. Eu tô ainda extasiada com tudo que aconteceu hoje; mas tenho certeza que sem a sua ajuda, muita coisa não aconteceria.\n\nObrigada por tudo !", 'author_name' => 'Quesia e Jhonata', 'context' => 'Casamento · 21/12/2025', 'sort_order' => 2, 'is_featured' => true, ], [ 'quote' => 'Que equipe!! Que equipe maravilhosa!! Obrigado pelo empenho de fazer tudo como eu queria!! Obrigado por se esforçar tanto e vir de tão longe pra realizar meu sonho!! Incríveis!!', 'author_name' => 'Milena e Weslley', 'context' => 'Casamento · 13/02/2026', 'sort_order' => 3, 'is_featured' => false, ], [ 'quote' => "Gostaríamos de agradecer por todo o acompanhamento e dedicação durante a realização do nosso casamento. Foi um dia muito especial e inesquecível para nós.\n\nDesde o início, conseguimos conduzir tudo aquilo que estávamos planejando, dentro dos horários que estipulamos, o que foi ótimo, e no grande dia sua equipe nos recebeu e tratou com muito carinho, atenção e cuidado, o que fez toda a diferença para vivermos esse momento com mais tranquilidade.\n\nTambém adoramos as sugestões e ideias para as fotos, que deixaram os registros ainda mais bonitos e espontâneos, porque não iríamos lembrar de quais poses fazer na hora.\n\nObrigada por fazer parte de um momento tão importante das nossas vidas. Desejamos muito sucesso e que muitos outros casais possam viver dias especiais através do trabalho da AMARE.", 'author_name' => 'Raquel e Pedro', 'context' => 'Casamento · 09/05/2026', 'sort_order' => 4, 'is_featured' => false, ], [ 'quote' => "Miiii, meu amor… você e sua equipe foram impecáveis.\n\nSuperou todas as nossas expectativas. Somos eternamente gratos por fazer nosso dia acontecer muito melhor do que imaginávamos.\n\nSempre muito atenciosa e paciente.\n\nAdoramos te conhecer e estamos muito felizes em termos escolhido você para assessorar nosso dia.", 'author_name' => 'Victoria e Pedro', 'context' => 'Casamento · 24/06/2026', 'sort_order' => 5, 'is_featured' => false, ], ]; $keepAuthors = array_column($testimonials, 'author_name'); Testimonial::query() ->whereNotIn('author_name', $keepAuthors) ->delete(); foreach ($testimonials as $testimonial) { Testimonial::query()->updateOrCreate( ['author_name' => $testimonial['author_name']], [ ...$testimonial, 'photo_path' => null, 'photo_alt' => null, '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; } }