5.1 KiB
5.1 KiB
1. Data model and domain catalog
- 1.1 Migration additive em
wedding_packages:slugunique (backfill a partir dename), campos de detalhe (eyebrow, title_line, title_emphasis, hero_lead, hero_image_, benefits jsonb, included_items jsonb, audience_, final_cta_, meta_), atualizar model$fillable/casts e factory. Evidência:database/migrations/2026_08_12_120000_extend_wedding_packages_for_detail_pages.php(roda limpo),app/Models/WeddingPackage.php(fillable+casts+booted slug),database/factories/WeddingPackageFactory.php(slug + campos de detalhe). - 1.2
PackageIconCatalog(chaves fechadas + labels pt-BR) e validação deicon_keyem benefits/included_items. Evidência:app/Domain/Marketing/PackageIconCatalog.php(6 chaves: calendar/checklist/users/map/heart/spark), Select icon_key emWeddingPackageFormusaPackageIconCatalog::labels(). - 1.3 Feature/unit: factory published com slug; scope published inalterado; icon_key inválido rejeitado na validação admin/request path usado pelo Filament. Evidência:
WeddingPackageTest(4 testes: scope published + seeder, factory slug autofill, icon catalog aceita/rejeitapaw).
2. Application + public route
- 2.1 Query
FindPublishedWeddingPackageBySlug+ teste 200/null para draft. Evidência:app/Application/Queries/Marketing/FindPublishedWeddingPackageBySlug.php;FindPublishedWeddingPackageBySlugTest(retorna published, null para draft/inexistente). - 2.2
PackageController@show, rota nomeadapackages.show/pacotes/{slug}, PageMeta (meta_title/description fallback name/summary|hero_lead, OG hero). Evidência:app/Http/Controllers/PublicSite/PackageController.php,routes/web.php(packages.show),PageMeta::forPackage(title=meta_title??title_line??name, description=meta_description??summary, ogImageUrl=hero_image_path). - 2.3 Estender
GetSitemapEntriescom pacotes publicados; teste sitemap inclui/exclui draft. Evidência:GetSitemapEntriesappends pacotes published;SitemapTest::test_sitemap_includes_only_published_packages(incluiessenza, excluirascunho-pacote).
3. Blade detail (Heritage Editorial)
- 3.1 View
pages/packages/show+ componentespackage-hero,package-benefits,package-included,package-audience; layoutlayouts.public; tokens DESIGN.md (sem hex do mock). Evidência:resources/views/pages/packages/show.blade.php+resources/views/components/public/package-{hero,benefits,included,audience}.blade.php+resources/views/components/package/icon.blade.php(SVG de catálogo); classesamare-*etext-hero-spread(tokens), sem hex do mock. - 3.2 CTA final reutiliza builder WhatsApp/briefing dos cards; teste feature assert
wa.me/briefing?servico_interesse. Evidência:app/Support/PackageContactLink::for()(helper compartilhado),package-final-cta.blade.phpusa builder;PackageDetailTest(tests 4-5: wa.me com número, briefing fallback). - 3.3 Feature: render de seções a partir do CMS; 404 draft; guest sem auth. Evidência:
PackageDetailTest(5 testes: render de seções CMS assertSee, 404 draft, 404 slug inexistente, CTA wa.me/briefing).
4. Filament + seeder + card links
- 4.1
WeddingPackageResource: seções Hero, Benefícios, Inclusos, Audiência, CTA final, SEO; FileUpload imagens; Select icon_key do catálogo. Evidência:app/Filament/Resources/WeddingPackages/Schemas/WeddingPackageForm.php(sections Identificação/Hero/Diferenciais/Inclusos/Audiência/CTA final/SEO;PublicImageUploadRules::fileUpload/altTextField;Select icon_keyoptionsPackageIconCatalog::labels());WeddingPackagesTableganhou colunaslug. - 4.2 Seeder/update Essenza (copy mock), Conduzione e Grand Jour (estrutura paralela) com slugs
essenza,conduzione,grand-jour. Evidência:database/seeders/WeddingPackagesSeeder.php(3 pacotes com slug + campos de detalhe completos);WeddingPackageTest::test_content_seeder_creates_official_wedding_modalitiesverde. - 4.3 Home +
/servicoscards: link secundário parapackages.show; CTA primário WA intacto; testes de regressão de CTA. Evidência:home/packages.blade.php+home/wedding-packages.blade.php+services/index.blade.php(link 'Conhecer esta modalidade' + CTA primário refatorado viaPackageContactLink);HomePageContentTest(22 testes: 143 assertions, incl. href packages.show).
5. Verification gate
- 5.1
composer pint:check+composer phpstanno escopo alterado. Evidência:vendor/bin/pint --testpassou (fixordered_importsemroutes/web.php);composer phpstan(level 5,--memory-limit=1G --debug) = No errors. - 5.2
composer test:unit+composer test:featureverdes (incl. novos testes de pacote). Evidência:test:unit42 passed (186 assertions);test:feature193 passed (1182 assertions);PackageDetailTest(5),FindPublishedWeddingPackageBySlugTest,SitemapTest(3) verdes. - 5.3
openspec validate package-detail-pagese marcar tasks só com evidência. Evidência:openspec validate package-detail-pages= "Change 'package-detail-pages' is valid"; tasks 1.1-5.3 marcadas acima com referências.