From c17209e5f45e7bdc114b8166615e15c9fceb689e Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Tue, 5 May 2026 14:00:01 +0900 Subject: [PATCH 1/5] fix: include main_image_url in WorldHeritageQueryService::buildWorldHeritagePayload The list-path payload (used by getAllHeritages and the Algolia search result reshape) didn't pass main_image_url, so the SummaryFactory could never populate WorldHeritageDto::mainImageUrl and thumbnail_url stayed null in the API. Forwards $heritage->main_image_url so the new fallback chain in WorldHeritageViewModel resolves correctly. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/Packages/Domains/WorldHeritageQueryService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/Packages/Domains/WorldHeritageQueryService.php b/src/app/Packages/Domains/WorldHeritageQueryService.php index e99669c..1bded14 100644 --- a/src/app/Packages/Domains/WorldHeritageQueryService.php +++ b/src/app/Packages/Domains/WorldHeritageQueryService.php @@ -322,6 +322,7 @@ private function buildWorldHeritagePayload($heritage): array 'short_description' => $heritage->short_description, 'image_url' => $heritage->images->first()?->url, 'unesco_site_url' => $heritage->unesco_site_url, + 'main_image_url' => $heritage->main_image_url, 'short_description_jp' => $heritage->descriptions?->short_description_ja, 'state_parties' => $statePartyCodeList, 'state_parties_meta' => $statePartiesMeta, From d5892498f0bd5c9102754a6cff01fdd40e6d99d6 Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Tue, 5 May 2026 14:00:18 +0900 Subject: [PATCH 2/5] fix: include main_image_url in WorldHeritageQueryService::getHeritageById factory payload The detail-path WorldHeritageDetailFactory::build call was missing the 'main_image_url' key, so the DTO's mainImageUrl stayed null and the detail endpoint's thumbnail_url did not reflect the new field. Forwards $heritage->main_image_url so the ViewModel fallback resolves. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/Packages/Domains/WorldHeritageQueryService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/Packages/Domains/WorldHeritageQueryService.php b/src/app/Packages/Domains/WorldHeritageQueryService.php index 1bded14..3f4a0c3 100644 --- a/src/app/Packages/Domains/WorldHeritageQueryService.php +++ b/src/app/Packages/Domains/WorldHeritageQueryService.php @@ -199,6 +199,7 @@ public function getHeritageById(int $id): WorldHeritageDto 'state_parties_meta' => $statePartiesMeta, 'short_description_jp' => $heritage->descriptions->short_description_ja, 'images' => $imageCollection->toArray(), + 'main_image_url' => $heritage->main_image_url, ]); } From 8607c12cf9a190649a6eaf1592979d705e5ce8f3 Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Tue, 5 May 2026 14:00:34 +0900 Subject: [PATCH 3/5] feat: select main_image_url in AlgoliaImportWorldHeritages query Adds world_heritage_sites.main_image_url to the chunked SELECT so the Algolia importer can read the new column off each model. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/Console/Commands/AlgoliaImportWorldHeritages.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/Console/Commands/AlgoliaImportWorldHeritages.php b/src/app/Console/Commands/AlgoliaImportWorldHeritages.php index 2e43adc..5a4cdfd 100644 --- a/src/app/Console/Commands/AlgoliaImportWorldHeritages.php +++ b/src/app/Console/Commands/AlgoliaImportWorldHeritages.php @@ -69,6 +69,7 @@ public function handle(): int 'world_heritage_sites.criteria', 'world_heritage_sites.year_inscribed', 'world_heritage_sites.is_endangered', + 'world_heritage_sites.main_image_url', ]) ->chunkById($chunk, function ($rows) use ($client, $indexName, $dryRun, &$processed): void { $objects = []; From 16cca0b4fcbd4ea1b3abcd29e5a2fa3b48f930e8 Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Tue, 5 May 2026 14:00:50 +0900 Subject: [PATCH 4/5] feat: include main_image_url field in AlgoliaImportWorldHeritages objects Each Algolia object now carries the raw main_image_url alongside the existing thumbnail_url so search consumers can render via the new field directly. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/Console/Commands/AlgoliaImportWorldHeritages.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/Console/Commands/AlgoliaImportWorldHeritages.php b/src/app/Console/Commands/AlgoliaImportWorldHeritages.php index 5a4cdfd..d4466c3 100644 --- a/src/app/Console/Commands/AlgoliaImportWorldHeritages.php +++ b/src/app/Console/Commands/AlgoliaImportWorldHeritages.php @@ -137,6 +137,7 @@ public function handle(): int 'criteria' => $row->criteria, 'year_inscribed' => $row->year_inscribed !== null ? (int) $row->year_inscribed : null, 'is_endangered' => (bool) $row->is_endangered, + 'main_image_url' => $row->main_image_url, 'thumbnail_url' => $row->images->first()?->url, 'state_party_codes' => $statePartyCodes, 'country_names_jp' => $countryCount > 1 ? $countryNamesJp : [], From b0cdfc4e7d3657892251dbfbbcb9d85cfd6161ee Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Tue, 5 May 2026 14:01:07 +0900 Subject: [PATCH 5/5] feat: prefer main_image_url for thumbnail_url in AlgoliaImportWorldHeritages Switches the Algolia object's thumbnail_url to main_image_url first, falling back to images[0]->url, so the search index mirrors the new fallback semantics now used by WorldHeritageViewModel and WorldHeritageDtoCollection::toSummaryArray. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/Console/Commands/AlgoliaImportWorldHeritages.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/Console/Commands/AlgoliaImportWorldHeritages.php b/src/app/Console/Commands/AlgoliaImportWorldHeritages.php index d4466c3..74576ae 100644 --- a/src/app/Console/Commands/AlgoliaImportWorldHeritages.php +++ b/src/app/Console/Commands/AlgoliaImportWorldHeritages.php @@ -138,7 +138,7 @@ public function handle(): int 'year_inscribed' => $row->year_inscribed !== null ? (int) $row->year_inscribed : null, 'is_endangered' => (bool) $row->is_endangered, 'main_image_url' => $row->main_image_url, - 'thumbnail_url' => $row->images->first()?->url, + 'thumbnail_url' => $row->main_image_url ?? $row->images->first()?->url, 'state_party_codes' => $statePartyCodes, 'country_names_jp' => $countryCount > 1 ? $countryNamesJp : [], ];