feat(seo): changefreq Enum 도입 + 사이트맵 사전결함 테스트 정정
계획서 위임 항목(Q6·Q7·Q8) 마감. Q8: sitemaps.org 폐쇄 어휘를 App\Enums\SitemapChangeFreq 로 도입해 저장(SitemapIndexer)·렌더(SitemapXmlRenderer) 두 경계에서 normalize 하고, 생산 지점(생성기 정적 URL·3 contributor·4 리스너) 리터럴을 enum case 로 치환. 규격에 없는 changefreq 가 사이트맵에 그대로 출력되던 것을 차단(대소문자·공백 흡수). Q6: Upgrade_7_0_0_beta_3Test 의 "동결 TARGETS === 살아있는 config" 단언은 동결 규정과 충돌하는 무효 불변식(config 는 에서 정당하게 진화)이므로 의도적 divergence 를 검증하도록 재작성. Q7: 코어 20건 사전 실패를 격리 실측으로 재분류 — 6클러스터는 전 스위트 OOM/싱글톤 누수 오염(격리 시 통과), GenericNotificationViaTest 는 readiness 게이트를 mock 하지 않아 빈 settings 로 mail 이 항상 제외되던 stale test 를 정정.
This commit is contained in:
1 parent
124433148c
commit
8fda5d31e1
17 files changed
+255
-30
No files matched your search
@@ -4,6 +4,7 @@ namespace Modules\Sirsoft\Board\Listeners;
|
||||
|
||||
use App\Contracts\Extension\CacheInterface;
|
||||
use App\Contracts\Extension\HookListenerInterface;
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Jobs\GenerateSitemapJob;
|
||||
use App\Seo\Contracts\SeoCacheManagerInterface;
|
||||
use App\Seo\SeoCacheRegenerator;
|
||||
@@ -185,7 +186,7 @@ class SeoBoardCacheListener implements HookListenerInterface
|
||||
$indexer->indexResource('board_post', $post->id, 'sirsoft-board', [[
|
||||
'url' => "/board/{$slug}/{$post->id}",
|
||||
'lastmod' => $post->updated_at?->toW3cString(),
|
||||
'changefreq' => 'monthly',
|
||||
'changefreq' => SitemapChangeFreq::Monthly->value,
|
||||
'priority' => 0.5,
|
||||
]]);
|
||||
} else {
|
||||
@@ -226,7 +227,7 @@ class SeoBoardCacheListener implements HookListenerInterface
|
||||
$indexer->indexResource('board', $board->id, 'sirsoft-board', [[
|
||||
'url' => "/board/{$board->slug}",
|
||||
'lastmod' => $board->updated_at?->toW3cString(),
|
||||
'changefreq' => 'daily',
|
||||
'changefreq' => SitemapChangeFreq::Daily->value,
|
||||
'priority' => 0.6,
|
||||
]]);
|
||||
} else {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Modules\Sirsoft\Board\Seo;
|
||||
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Seo\AbstractSitemapContributor;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Sirsoft\Board\Repositories\Contracts\BoardRepositoryInterface;
|
||||
@@ -82,7 +83,7 @@ class BoardSitemapContributor extends AbstractSitemapContributor
|
||||
if ($seoBoards) {
|
||||
yield [
|
||||
'url' => '/boards',
|
||||
'changefreq' => 'weekly',
|
||||
'changefreq' => SitemapChangeFreq::Weekly->value,
|
||||
'priority' => 0.5,
|
||||
'resource_type' => 'board_index',
|
||||
'resource_id' => null,
|
||||
@@ -100,7 +101,7 @@ class BoardSitemapContributor extends AbstractSitemapContributor
|
||||
yield [
|
||||
'url' => "/board/{$board->slug}",
|
||||
'lastmod' => $board->updated_at?->toW3cString(),
|
||||
'changefreq' => 'daily',
|
||||
'changefreq' => SitemapChangeFreq::Daily->value,
|
||||
'priority' => 0.6,
|
||||
'resource_type' => 'board',
|
||||
'resource_id' => (string) $board->id,
|
||||
@@ -116,7 +117,7 @@ class BoardSitemapContributor extends AbstractSitemapContributor
|
||||
yield [
|
||||
'url' => "/board/{$board->slug}/{$post->id}",
|
||||
'lastmod' => $post->updated_at?->toW3cString(),
|
||||
'changefreq' => 'monthly',
|
||||
'changefreq' => SitemapChangeFreq::Monthly->value,
|
||||
'priority' => 0.5,
|
||||
'resource_type' => 'board_post',
|
||||
'resource_id' => (string) $post->id,
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Modules\Sirsoft\Ecommerce\Listeners;
|
||||
|
||||
use App\Contracts\Extension\CacheInterface;
|
||||
use App\Contracts\Extension\HookListenerInterface;
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Jobs\GenerateSitemapJob;
|
||||
use App\Seo\Contracts\SeoCacheManagerInterface;
|
||||
use App\Seo\SitemapIndexer;
|
||||
@@ -145,7 +146,7 @@ class SeoCategoryCacheListener implements HookListenerInterface
|
||||
$indexer->indexResource('category', $category->id, 'sirsoft-ecommerce', [[
|
||||
'url' => "/{$routePath}/category/{$category->slug}",
|
||||
'lastmod' => $category->updated_at?->toW3cString(),
|
||||
'changefreq' => 'weekly',
|
||||
'changefreq' => SitemapChangeFreq::Weekly->value,
|
||||
'priority' => 0.6,
|
||||
]]);
|
||||
} else {
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Modules\Sirsoft\Ecommerce\Listeners;
|
||||
|
||||
use App\Contracts\Extension\CacheInterface;
|
||||
use App\Contracts\Extension\HookListenerInterface;
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Jobs\GenerateSitemapJob;
|
||||
use App\Seo\Contracts\SeoCacheManagerInterface;
|
||||
use App\Seo\SeoCacheRegenerator;
|
||||
@@ -163,7 +164,7 @@ class SeoProductCacheListener implements HookListenerInterface
|
||||
$indexer->indexResource('product', $product->id, 'sirsoft-ecommerce', [[
|
||||
'url' => "/{$routePath}/products/{$product->id}",
|
||||
'lastmod' => $product->updated_at?->toW3cString(),
|
||||
'changefreq' => 'weekly',
|
||||
'changefreq' => SitemapChangeFreq::Weekly->value,
|
||||
'priority' => 0.8,
|
||||
]]);
|
||||
} else {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Modules\Sirsoft\Ecommerce\Seo;
|
||||
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Seo\AbstractSitemapContributor;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Sirsoft\Ecommerce\Repositories\Contracts\CategoryRepositoryInterface;
|
||||
@@ -79,7 +80,7 @@ class EcommerceSitemapContributor extends AbstractSitemapContributor
|
||||
if ((bool) g7_module_settings('sirsoft-ecommerce', 'seo.seo_shop_index', true)) {
|
||||
yield [
|
||||
'url' => "/{$routePath}/products",
|
||||
'changefreq' => 'daily',
|
||||
'changefreq' => SitemapChangeFreq::Daily->value,
|
||||
'priority' => 0.7,
|
||||
'resource_type' => 'shop_index',
|
||||
'resource_id' => null,
|
||||
@@ -92,7 +93,7 @@ class EcommerceSitemapContributor extends AbstractSitemapContributor
|
||||
yield [
|
||||
'url' => "/{$routePath}/category/{$category->slug}",
|
||||
'lastmod' => $category->updated_at?->toW3cString(),
|
||||
'changefreq' => 'weekly',
|
||||
'changefreq' => SitemapChangeFreq::Weekly->value,
|
||||
'priority' => 0.6,
|
||||
'resource_type' => 'category',
|
||||
'resource_id' => (string) $category->id,
|
||||
@@ -106,7 +107,7 @@ class EcommerceSitemapContributor extends AbstractSitemapContributor
|
||||
yield [
|
||||
'url' => "/{$routePath}/products/{$product->id}",
|
||||
'lastmod' => $product->updated_at?->toW3cString(),
|
||||
'changefreq' => 'weekly',
|
||||
'changefreq' => SitemapChangeFreq::Weekly->value,
|
||||
'priority' => 0.8,
|
||||
'resource_type' => 'product',
|
||||
'resource_id' => (string) $product->id,
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Modules\Sirsoft\Page\Listeners;
|
||||
|
||||
use App\Contracts\Extension\CacheInterface;
|
||||
use App\Contracts\Extension\HookListenerInterface;
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Jobs\GenerateSitemapJob;
|
||||
use App\Seo\Contracts\SeoCacheManagerInterface;
|
||||
use App\Seo\SitemapIndexer;
|
||||
@@ -137,7 +138,7 @@ class SeoPageCacheListener implements HookListenerInterface
|
||||
$indexer->indexResource('page', $page->id, 'sirsoft-page', [[
|
||||
'url' => "/page/{$page->slug}",
|
||||
'lastmod' => $page->updated_at?->toW3cString(),
|
||||
'changefreq' => 'monthly',
|
||||
'changefreq' => SitemapChangeFreq::Monthly->value,
|
||||
'priority' => 0.5,
|
||||
]]);
|
||||
} else {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Modules\Sirsoft\Page\Seo;
|
||||
|
||||
use App\Enums\SitemapChangeFreq;
|
||||
use App\Seo\AbstractSitemapContributor;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Sirsoft\Page\Repositories\Contracts\PageRepositoryInterface;
|
||||
@@ -60,7 +61,7 @@ class PageSitemapContributor extends AbstractSitemapContributor
|
||||
yield [
|
||||
'url' => "/page/{$page->slug}",
|
||||
'lastmod' => $page->updated_at?->toW3cString(),
|
||||
'changefreq' => 'monthly',
|
||||
'changefreq' => SitemapChangeFreq::Monthly->value,
|
||||
'priority' => 0.5,
|
||||
'resource_type' => 'page',
|
||||
'resource_id' => (string) $page->id,
|
||||
|
||||
Reference in new issue
Block a user