From 526546c4b4d145987ea601016b9a9bbdf133cad7 Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Sat, 23 Aug 2025 16:00:08 +0900 Subject: [PATCH 1/4] fix: Entity amendments following database design changes --- .../Domains/Test/WorldHeritageEntityTest.php | 308 +++++++++++++----- .../Packages/Domains/WorldHeritageEntity.php | 45 ++- 2 files changed, 265 insertions(+), 88 deletions(-) diff --git a/src/app/Packages/Domains/Test/WorldHeritageEntityTest.php b/src/app/Packages/Domains/Test/WorldHeritageEntityTest.php index bb0bb1c..49f00e7 100644 --- a/src/app/Packages/Domains/Test/WorldHeritageEntityTest.php +++ b/src/app/Packages/Domains/Test/WorldHeritageEntityTest.php @@ -17,101 +17,239 @@ protected function tearDown(): void parent::tearDown(); } - private function arrayData(): array + private static function arraySingleData(): array { - return - [ - 'id' => 1, - 'unesco_id' => '668', - 'official_name' => 'Historic Monuments of Ancient Nara', - 'name' => 'Historic Monuments of Ancient Nara', - 'name_jp' => '古都奈良の文化財', - 'country' => 'Japan', - 'region' => 'Asia', - 'state_party' => 'JP', - 'category' => 'cultural', - 'criteria' => ['ii', 'iii', 'v'], - 'year_inscribed' => 1998, - 'area_hectares' => 442.0, - 'buffer_zone_hectares' => 320.0, - 'is_endangered' => false, - 'latitude' => 34.6851, - 'longitude' => 135.8048, - 'short_description' => 'Temples and shrines of the first permanent capital of Japan.', - 'image_url' => '', - 'unesco_site_url' => 'https://whc.unesco.org/en/list/668/', - ]; + return [ + 'unesco_id' => '668', + 'official_name' => 'Historic Monuments of Ancient Nara', + 'name' => 'Historic Monuments of Ancient Nara', + 'name_jp' => '古都奈良の文化財', + 'country' => 'Japan', + 'region' => 'Asia', + 'category' => 'cultural', + 'criteria' => ['ii', 'iii', 'v'], + 'state_party' => null, + 'year_inscribed' => 1998, + 'area_hectares' => 442.0, + 'buffer_zone_hectares' => 320.0, + 'is_endangered' => false, + 'latitude' => 34.6851, + 'longitude' => 135.8048, + 'short_description' => 'Temples and shrines of the first permanent capital of Japan.', + 'image_url' => '', + 'unesco_site_url' => 'https://whc.unesco.org/en/list/668/', + 'state_parties' => ['JP'], + 'state_parties_meta' => [ + 'JP' => [ + 'is_primary' => true, + 'inscription_year' => 1998, + ], + ], + ]; } - public function test_entity_check_type(): void + private static function arrayMultiData(): array { - $heritageEntity = new WorldHeritageEntity( - $this->arrayData()['id'], - $this->arrayData()['unesco_id'], - $this->arrayData()['official_name'], - $this->arrayData()['name'], - $this->arrayData()['country'], - $this->arrayData()['region'], - $this->arrayData()['category'], - $this->arrayData()['year_inscribed'], - $this->arrayData()['is_endangered'], - $this->arrayData()['latitude'], - $this->arrayData()['longitude'], - $this->arrayData()['name_jp'], - $this->arrayData()['state_party'], - $this->arrayData()['criteria'], - $this->arrayData()['area_hectares'], - $this->arrayData()['buffer_zone_hectares'], - $this->arrayData()['short_description'], - $this->arrayData()['image_url'], - $this->arrayData()['unesco_site_url'] + return [ + 'unesco_id' => 1133, + 'official_name' => "Ancient and Primeval Beech Forests of the Carpathians and Other Regions of Europe", + 'name' => "Ancient and Primeval Beech Forests", + 'name_jp' => null, + 'country' => 'Slovakia', + 'region' => 'Europe', + 'category' => 'natural', + 'criteria' => ['ix'], + 'state_party' => null, + 'year_inscribed' => 2007, + 'area_hectares' => 99947.81, + 'buffer_zone_hectares' => 296275.8, + 'is_endangered' => false, + 'latitude' => 0.0, + 'longitude' => 0.0, + 'short_description' => 'Transnational serial property of European beech forests illustrating post-glacial expansion and ecological processes across Europe.', + 'image_url' => '', + 'unesco_site_url' => 'https://whc.unesco.org/en/list/1133/', + 'state_parties' => [ + 'AL','AT','BE','BA','BG','HR','CZ','FR','DE','IT','MK','PL','RO','SK','SI','ES','CH','UA' + ], + 'state_parties_meta' => [ + 'AL' => ['is_primary' => false, 'inscription_year' => 2007], + 'AT' => ['is_primary' => false, 'inscription_year' => 2007], + 'BE' => ['is_primary' => false, 'inscription_year' => 2007], + 'BA' => ['is_primary' => false, 'inscription_year' => 2007], + 'BG' => ['is_primary' => false, 'inscription_year' => 2007], + 'HR' => ['is_primary' => false, 'inscription_year' => 2007], + 'CZ' => ['is_primary' => false, 'inscription_year' => 2007], + 'FR' => ['is_primary' => false, 'inscription_year' => 2007], + 'DE' => ['is_primary' => false, 'inscription_year' => 2007], + 'IT' => ['is_primary' => false, 'inscription_year' => 2007], + 'MK' => ['is_primary' => false, 'inscription_year' => 2007], + 'PL' => ['is_primary' => false, 'inscription_year' => 2007], + 'RO' => ['is_primary' => false, 'inscription_year' => 2007], + 'SK' => ['is_primary' => true, 'inscription_year' => 2007], + 'SI' => ['is_primary' => false, 'inscription_year' => 2007], + 'ES' => ['is_primary' => false, 'inscription_year' => 2007], + 'CH' => ['is_primary' => false, 'inscription_year' => 2007], + 'UA' => ['is_primary' => false, 'inscription_year' => 2007], + ], + ]; + } + + + public function test_entity_check_single_type(): void + { + $entity = new WorldHeritageEntity( + self::arraySingleData()['id'] ?? null, + self::arraySingleData()['unesco_id'], + self::arraySingleData()['official_name'], + self::arraySingleData()['name'], + self::arraySingleData()['country'], + self::arraySingleData()['region'], + self::arraySingleData()['category'], + self::arraySingleData()['year_inscribed'], + self::arraySingleData()['latitude'], + self::arraySingleData()['longitude'], + self::arraySingleData()['is_endangered'], + self::arraySingleData()['name_jp'], + self::arraySingleData()['state_party'], + self::arraySingleData()['criteria'], + self::arraySingleData()['area_hectares'], + self::arraySingleData()['buffer_zone_hectares'], + self::arraySingleData()['short_description'], + self::arraySingleData()['image_url'], + self::arraySingleData()['unesco_site_url'], + self::arraySingleData()['state_parties'], + self::arraySingleData()['state_parties_meta'] ); - $this->assertInstanceOf(WorldHeritageEntity::class, $heritageEntity); + $this->assertInstanceOf(WorldHeritageEntity::class, $entity); } - public function test_entity_check_value(): void + public function test_entity_check_single_value(): void { - $heritageEntity = new WorldHeritageEntity( - $this->arrayData()['id'], - $this->arrayData()['unesco_id'], - $this->arrayData()['official_name'], - $this->arrayData()['name'], - $this->arrayData()['country'], - $this->arrayData()['region'], - $this->arrayData()['category'], - $this->arrayData()['year_inscribed'], - $this->arrayData()['latitude'], - $this->arrayData()['longitude'], - $this->arrayData()['is_endangered'], - $this->arrayData()['name_jp'], - $this->arrayData()['state_party'], - $this->arrayData()['criteria'], - $this->arrayData()['area_hectares'], - $this->arrayData()['buffer_zone_hectares'], - $this->arrayData()['short_description'], - $this->arrayData()['image_url'], - $this->arrayData()['unesco_site_url'] + $entity = new WorldHeritageEntity( + self::arraySingleData()['id'] ?? null, + self::arraySingleData()['unesco_id'], + self::arraySingleData()['official_name'], + self::arraySingleData()['name'], + self::arraySingleData()['country'], + self::arraySingleData()['region'], + self::arraySingleData()['category'], + self::arraySingleData()['year_inscribed'], + self::arraySingleData()['latitude'], + self::arraySingleData()['longitude'], + self::arraySingleData()['is_endangered'], + self::arraySingleData()['name_jp'], + self::arraySingleData()['state_party'], + self::arraySingleData()['criteria'], + self::arraySingleData()['area_hectares'], + self::arraySingleData()['buffer_zone_hectares'], + self::arraySingleData()['short_description'], + self::arraySingleData()['image_url'], + self::arraySingleData()['unesco_site_url'], + self::arraySingleData()['state_parties'], + self::arraySingleData()['state_parties_meta'] ); - $this->assertSame($this->arrayData()['id'], $heritageEntity->getId()); - $this->assertSame($this->arrayData()['unesco_id'], $heritageEntity->getUnescoId()); - $this->assertSame($this->arrayData()['official_name'], $heritageEntity->getOfficialName()); - $this->assertSame($this->arrayData()['name'], $heritageEntity->getName()); - $this->assertSame($this->arrayData()['country'], $heritageEntity->getCountry()); - $this->assertSame($this->arrayData()['region'], $heritageEntity->getRegion()); - $this->assertSame($this->arrayData()['category'], $heritageEntity->getCategory()); - $this->assertSame($this->arrayData()['year_inscribed'], $heritageEntity->getYearInscribed()); - $this->assertSame($this->arrayData()['is_endangered'], $heritageEntity->isEndangered()); - $this->assertSame($this->arrayData()['latitude'], $heritageEntity->getLatitude()); - $this->assertSame($this->arrayData()['longitude'], $heritageEntity->getLongitude()); - $this->assertSame($this->arrayData()['name_jp'], $heritageEntity->getNameJp()); - $this->assertSame($this->arrayData()['state_party'], $heritageEntity->getStateParty()); - $this->assertSame($this->arrayData()['criteria'], $heritageEntity->getCriteria()); - $this->assertSame($this->arrayData()['area_hectares'], $heritageEntity->getAreaHectares()); - $this->assertSame($this->arrayData()['buffer_zone_hectares'], $heritageEntity->getBufferZoneHectares()); - $this->assertSame($this->arrayData()['short_description'], $heritageEntity->getShortDescription()); - $this->assertSame($this->arrayData()['image_url'], $heritageEntity->getImageUrl()); - $this->assertSame($this->arrayData()['unesco_site_url'], $heritageEntity->getUnescoSiteUrl()); + $this->assertEquals(self::arraySingleData()['unesco_id'], $entity->getUnescoId()); + $this->assertEquals(self::arraySingleData()['official_name'], $entity->getOfficialName()); + $this->assertEquals(self::arraySingleData()['name'], $entity->getName()); + $this->assertEquals(self::arraySingleData()['country'], $entity->getCountry()); + $this->assertEquals(self::arraySingleData()['region'], $entity->getRegion()); + $this->assertEquals(self::arraySingleData()['category'], $entity->getCategory()); + $this->assertEquals(self::arraySingleData()['year_inscribed'], $entity->getYearInscribed()); + $this->assertEquals(self::arraySingleData()['latitude'], $entity->getLatitude()); + $this->assertEquals(self::arraySingleData()['longitude'], $entity->getLongitude()); + $this->assertEquals(self::arraySingleData()['is_endangered'], $entity->isEndangered()); + $this->assertEquals(self::arraySingleData()['name_jp'], $entity->getNameJp()); + $this->assertEquals(self::arraySingleData()['state_party'], $entity->getStateParty()); + $this->assertEquals(self::arraySingleData()['criteria'], $entity->getCriteria()); + $this->assertEquals(self::arraySingleData()['area_hectares'], $entity->getAreaHectares()); + $this->assertEquals(self::arraySingleData()['buffer_zone_hectares'], $entity->getBufferZoneHectares()); + $this->assertEquals(self::arraySingleData()['short_description'], $entity->getShortDescription()); + $this->assertEquals(self::arraySingleData()['image_url'], $entity->getImageUrl()); + $this->assertEquals(self::arraySingleData()['unesco_site_url'], $entity->getUnescoSiteUrl()); + $this->assertEquals(self::arraySingleData()['state_parties'], $entity->getStatePartyCodes()); + $this->assertEquals(self::arraySingleData()['state_parties_meta'], $entity->getStatePartyMeta()); + } + + public function test_entity_check_multi_type(): void + { + $entity = new WorldHeritageEntity( + self::arrayMultiData()['id'] ?? null, + self::arrayMultiData()['unesco_id'], + self::arrayMultiData()['official_name'], + self::arrayMultiData()['name'], + self::arrayMultiData()['country'], + self::arrayMultiData()['region'], + self::arrayMultiData()['category'], + self::arrayMultiData()['year_inscribed'], + self::arrayMultiData()['is_endangered'], + self::arrayMultiData()['latitude'], + self::arrayMultiData()['longitude'], + self::arrayMultiData()['name_jp'], + self::arrayMultiData()['state_party'], + self::arrayMultiData()['criteria'], + self::arrayMultiData()['area_hectares'], + self::arrayMultiData()['buffer_zone_hectares'], + self::arrayMultiData()['short_description'], + self::arrayMultiData()['image_url'], + self::arrayMultiData()['unesco_site_url'], + self::arrayMultiData()['state_parties'], + self::arrayMultiData()['state_parties_meta'] + ); + + $this->assertInstanceOf(WorldHeritageEntity::class, $entity); + } + + public function test_entity_check_multi_value(): void + { + $entity = new WorldHeritageEntity( + self::arrayMultiData()['id'] ?? null, + self::arrayMultiData()['unesco_id'], + self::arrayMultiData()['official_name'], + self::arrayMultiData()['name'], + self::arrayMultiData()['country'], + self::arrayMultiData()['region'], + self::arrayMultiData()['category'], + self::arrayMultiData()['year_inscribed'], + self::arrayMultiData()['is_endangered'], + self::arrayMultiData()['latitude'], + self::arrayMultiData()['longitude'], + self::arrayMultiData()['name_jp'], + self::arrayMultiData()['state_party'], + self::arrayMultiData()['criteria'], + self::arrayMultiData()['area_hectares'], + self::arrayMultiData()['buffer_zone_hectares'], + self::arrayMultiData()['short_description'], + self::arrayMultiData()['image_url'], + self::arrayMultiData()['unesco_site_url'], + self::arrayMultiData()['state_parties'], + self::arrayMultiData()['state_parties_meta'] + ); + + $this->assertEquals(self::arrayMultiData()['unesco_id'], $entity->getUnescoId()); + $this->assertEquals(self::arrayMultiData()['official_name'], $entity->getOfficialName()); + $this->assertEquals(self::arrayMultiData()['name'], $entity->getName()); + $this->assertEquals(self::arrayMultiData()['country'], $entity->getCountry()); + $this->assertEquals(self::arrayMultiData()['region'], $entity->getRegion()); + $this->assertEquals(self::arrayMultiData()['category'], $entity->getCategory()); + $this->assertEquals(self::arrayMultiData()['year_inscribed'], $entity->getYearInscribed()); + $this->assertEquals(self::arrayMultiData()['is_endangered'], $entity->isEndangered()); + $this->assertEquals(self::arrayMultiData()['latitude'], $entity->getLatitude()); + $this->assertEquals(self::arrayMultiData()['longitude'], $entity->getLongitude()); + $this->assertEquals(self::arrayMultiData()['name_jp'], $entity->getNameJp()); + $this->assertEquals(self::arrayMultiData()['criteria'], $entity->getCriteria()); + $this->assertEquals(self::arrayMultiData()['area_hectares'], $entity->getAreaHectares()); + $this->assertEquals(self::arrayMultiData()['buffer_zone_hectares'], $entity->getBufferZoneHectares()); + $this->assertEquals(self::arrayMultiData()['short_description'], $entity->getShortDescription()); + $this->assertEquals(self::arrayMultiData()['image_url'], $entity->getImageUrl()); + $this->assertEquals(self::arrayMultiData()['unesco_site_url'], $entity->getUnescoSiteUrl()); + $this->assertEquals(self::arrayMultiData()['state_parties'], $entity->getStatePartyCodes()); + $this->assertEquals(self::arrayMultiData()['state_parties_meta'], $entity->getStatePartyMeta()); + $this->assertEquals( + self::arrayMultiData()['state_parties_meta']['SK'], + $entity->getStatePartyMeta()['SK'] + ); } } \ No newline at end of file diff --git a/src/app/Packages/Domains/WorldHeritageEntity.php b/src/app/Packages/Domains/WorldHeritageEntity.php index f627bd0..76b9122 100644 --- a/src/app/Packages/Domains/WorldHeritageEntity.php +++ b/src/app/Packages/Domains/WorldHeritageEntity.php @@ -23,7 +23,9 @@ public function __construct( public ?float $bufferZoneHectares = null, public ?string $shortDescription = null, public ?string $imageUrl = null, - public ?string $unescoSiteUrl = null + public ?string $unescoSiteUrl = null, + private array $statePartyCodes = [], + private array $statePartyMeta = [] ) {} public function getId(): ?int @@ -96,12 +98,12 @@ public function isEndangered(): bool return $this->isEndangered; } - public function getLatitude(): float + public function getLatitude(): ?float { return $this->latitude; } - public function getLongitude(): float + public function getLongitude(): ?float { return $this->longitude; } @@ -120,4 +122,41 @@ public function getUnescoSiteUrl(): ?string { return $this->unescoSiteUrl; } + + public function getStatePartyCodes(): array + { + return $this->statePartyCodes; + } + + public function getStatePartyMeta(): array + { + return $this->statePartyMeta; + } + + public function isTransnational(): bool + { + return count($this->statePartyCodes) > 1; + } + + public function getPrimaryStatePartyCode(): ?string + { + foreach ($this->statePartyMeta as $code => $meta) { + if (!empty($meta['is_primary'])) return $code; + } + return $this->statePartyCodes[0] ?? null; + } + + public function getStatePartyCodesOrFallback(): array + { + if ($this->statePartyCodes) + return $this->statePartyCodes; + + if (!$this->stateParty) + return []; + + $parts = preg_split('/[;,\s]+/', strtoupper($this->stateParty)); + $codes = array_filter($parts, fn($country) => preg_match('/^[A-Z]{2}$/', $country)); + + return array_values(array_unique($codes)); + } } \ No newline at end of file From d90d119caaa272309fd769f32db647f4284d1ed0 Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Sat, 23 Aug 2025 16:00:51 +0900 Subject: [PATCH 2/4] fix: migration-file-column-change --- .../2025_07_28_195929_create_world_heritage_sites.php | 2 +- src/database/migrations/2025_08_18_080451_countries.php | 2 +- .../migrations/2025_08_18_080644_site_state_parties.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/database/migrations/2025_07_28_195929_create_world_heritage_sites.php b/src/database/migrations/2025_07_28_195929_create_world_heritage_sites.php index 19f10bb..6768a5f 100644 --- a/src/database/migrations/2025_07_28_195929_create_world_heritage_sites.php +++ b/src/database/migrations/2025_07_28_195929_create_world_heritage_sites.php @@ -19,7 +19,7 @@ public function up(): void $table->string('name_jp')->nullable(); $table->string('country'); $table->string('region'); - $table->string('state_party', 5)->nullable(); + $table->string('state_party', 255)->nullable(); $table->enum('category', ['cultural', 'natural', 'mixed']); $table->json('criteria')->nullable(); $table->year('year_inscribed'); diff --git a/src/database/migrations/2025_08_18_080451_countries.php b/src/database/migrations/2025_08_18_080451_countries.php index 6277318..ddf0f48 100644 --- a/src/database/migrations/2025_08_18_080451_countries.php +++ b/src/database/migrations/2025_08_18_080451_countries.php @@ -24,6 +24,6 @@ public function up(): void */ public function down(): void { - // + Schema::dropIfExists('countries'); } }; diff --git a/src/database/migrations/2025_08_18_080644_site_state_parties.php b/src/database/migrations/2025_08_18_080644_site_state_parties.php index 886e96e..430535a 100644 --- a/src/database/migrations/2025_08_18_080644_site_state_parties.php +++ b/src/database/migrations/2025_08_18_080644_site_state_parties.php @@ -9,7 +9,7 @@ public function up(): void { Schema::create('site_state_parties', function (Blueprint $table) { - $table->char('state_party_code', 2); + $table->char('state_party_code', 255); $table->foreignId('world_heritage_site_id') ->constrained('world_heritage_sites') From 26f929b38788a462dfc3a475d2f267b5c17545a9 Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Sat, 23 Aug 2025 17:58:36 +0900 Subject: [PATCH 3/4] feat: create-country-initial-data --- src/app/Models/Country.php | 1 + src/database/seeders/CountrySeeder.php | 115 +++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 src/database/seeders/CountrySeeder.php diff --git a/src/app/Models/Country.php b/src/app/Models/Country.php index 7189196..8916bec 100644 --- a/src/app/Models/Country.php +++ b/src/app/Models/Country.php @@ -21,6 +21,7 @@ class Country extends Model protected $primaryKey = 'state_party_code'; public $incrementing = false; protected $keyType = 'string'; + public $timestamps = false; public function worldHeritageSites(): BelongsToMany { diff --git a/src/database/seeders/CountrySeeder.php b/src/database/seeders/CountrySeeder.php new file mode 100644 index 0000000..8ea9d73 --- /dev/null +++ b/src/database/seeders/CountrySeeder.php @@ -0,0 +1,115 @@ + [ + 'DZ','AO','BJ','BF','BI','CV','CM','CF','TD','KM','CG','CD','CI','DJ','EG','GQ','ER','SZ','ET','GA','GM','GH','GN','GW', + 'KE','LS','LR','LY','MG','MW','ML','MR','MU','MA','MZ','NA','NE','NG','RW','ST','SN','SC','SL','SO','ZA','SS','SD','TZ','TG','TN','UG','ZM','ZW', + ], + 'Americas' => [ + 'AG','AR','BS','BB','BZ','BO','BR','CA','CL','CO','CR','CU','DM','DO','EC','SV','GD','GT','GY','HT','HN','JM','KN','LC','VC','MX','NI','PA','PE','PY','SR','TT','US','UY','VE', + ], + 'Asia' => [ + 'AF','AM','AZ','BH','BD','BT','BN','KH','CN','CY','GE','IN','ID','IR','IQ','IL','JO','JP','KZ','KW','KG','LA','LB','MY','MV','MN','MM','NP','KP','KR','OM','PK','PS','PH','QA','SA','SG','LK','SY','TJ','TH','TL','TM','TR','AE','UZ','VN','YE', + ], + 'Europe' => [ + 'AD','AL','AT','BY','BE','BA','BG','HR','CZ','DK','EE','FI','FR','DE','GR','HU','IS','IE','IT','LV','LI','LT','LU','MT','MD','MC','ME','NL','MK','NO','PL','PT','RO','RU','SM','RS','SK','SI','ES','SE','CH','UA','GB','VA', + ], + 'Oceania' => [ + 'AU','FJ','KI','MH','FM','NR','NZ','PW','PG','WS','SB','TO','TV','VU', + ], + ]; + + $nameJp = [ + 'JP'=>'日本','CN'=>'中国','KR'=>'大韓民国','KP'=>'朝鮮民主主義人民共和国','TW'=> '台湾', + 'SG'=>'シンガポール','MY'=>'マレーシア','TH'=>'タイ','VN'=>'ベトナム','PH'=>'フィリピン','ID'=>'インドネシア', + 'LA'=>'ラオス','KH'=>'カンボジア','MM'=>'ミャンマー','LK'=>'スリランカ','IN'=>'インド','BD'=>'バングラデシュ', + 'IR'=>'イラン','IQ'=>'イラク','IL'=>'イスラエル','JO'=>'ヨルダン','SA'=>'サウジアラビア','AE'=>'アラブ首長国連邦','QA'=>'カタール','KW'=>'クウェート', + 'TR'=>'トルコ','KZ'=>'カザフスタン','KG'=>'キルギス','TJ'=>'タジキスタン','TM'=>'トルクメニスタン','MN'=>'モンゴル','PK'=>'パキスタン','NP'=>'ネパール','PS'=>'パレスチナ', + 'AF'=>'アフガニスタン','AZ'=>'アゼルバイジャン','AM'=>'アルメニア','LB'=>'レバノン','OM'=>'オマーン','YE'=>'イエメン','BH'=>'バーレーン','MV'=>'モルディブ', + 'AL'=>'アルバニア','AT'=>'オーストリア','BE'=>'ベルギー','BA'=>'ボスニア・ヘルツェゴビナ','BG'=>'ブルガリア','HR'=>'クロアチア', + 'CZ'=>'チェコ','FR'=>'フランス','DE'=>'ドイツ','IT'=>'イタリア','MK'=>'北マケドニア','PL'=>'ポーランド','RO'=>'ルーマニア', + 'SK'=>'スロバキア','SI'=>'スロベニア','ES'=>'スペイン','CH'=>'スイス','UA'=>'ウクライナ','GB'=>'イギリス','IE'=>'アイルランド', + 'NL'=>'オランダ','PT'=>'ポルトガル','NO'=>'ノルウェー','SE'=>'スウェーデン','FI'=>'フィンランド','EE'=>'エストニア','LV'=>'ラトビア','LT'=>'リトアニア', + 'IS'=>'アイスランド','DK'=>'デンマーク','LI'=>'リヒテンシュタイン','LU'=>'ルクセンブルク','MT'=>'マルタ','MC'=>'モナコ','ME'=>'モンテネグロ','SM'=>'サンマリノ','VA'=>'バチカン','RU'=>'ロシア連邦','GE'=>'ジョージア','CY'=>'キプロス', + 'BY'=>'ベラルーシ','GR'=>'ギリシャ','RS'=>'セルビア', + 'EG'=>'エジプト','MA'=>'モロッコ','TN'=>'チュニジア','DZ'=>'アルジェリア','ZA'=>'南アフリカ共和国','ET'=>'エチオピア','KE'=>'ケニア','NG'=>'ナイジェリア','GH'=>'ガーナ','SN'=>'セネガル','TZ'=>'タンザニア','UG'=>'ウガンダ','RW'=>'ルワンダ','ZM'=>'ザンビア','ZW'=>'ジンバブエ','CM'=>'カメルーン','CI'=>'コートジボワール','GA'=>'ガボン','GM'=>'ガンビア','GN'=>'ギニア','GW'=>'ギニアビサウ','BI'=>'ブルンジ','BF'=>'ブルキナファソ','BJ'=>'ベナン','CV'=>'カーボベルデ','KM'=>'コモロ','CG'=>'コンゴ共和国','CD'=>'コンゴ民主共和国','DJ'=>'ジブチ','ER'=>'エリトリア','GQ'=>'赤道ギニア','LY'=>'リビア','LR'=>'リベリア','LS'=>'レソト','MG'=>'マダガスカル','MW'=>'マラウイ','ML'=>'マリ','MR'=>'モーリタニア','MU'=>'モーリシャス','MZ'=>'モザンビーク','NA'=>'ナミビア','NE'=>'ニジェール','SC'=>'セーシェル','SL'=>'シエラレオネ','SO'=>'ソマリア','SS'=>'南スーダン','SD'=>'スーダン','TG'=>'トーゴ', + 'US'=>'アメリカ合衆国','CA'=>'カナダ','MX'=>'メキシコ','AR'=>'アルゼンチン','BR'=>'ブラジル','CL'=>'チリ','CO'=>'コロンビア','PE'=>'ペルー','BO'=>'ボリビア','PY'=>'パラグアイ','UY'=>'ウルグアイ','VE'=>'ベネズエラ','EC'=>'エクアドル','CR'=>'コスタリカ','PA'=>'パナマ','CU'=>'キューバ','DO'=>'ドミニカ共和国','DM'=>'ドミニカ国','HT'=>'ハイチ','HN'=>'ホンジュラス','NI'=>'ニカラグア','SV'=>'エルサルバドル','GT'=>'グアテマラ','GY'=>'ガイアナ','SR'=>'スリナム','BS'=>'バハマ','BB'=>'バルバドス','BZ'=>'ベリーズ','GD'=>'グレナダ','JM'=>'ジャマイカ','KN'=>'セントクリストファー・ネーヴィス','LC'=>'セントルシア','VC'=>'セントビンセントおよびグレナディーン諸島','TT'=>'トリニダード・トバゴ', + 'AU'=>'オーストラリア','NZ'=>'ニュージーランド','PG'=>'パプアニューギニア','FJ'=>'フィジー','WS'=>'サモア','SB'=>'ソロモン諸島','TO'=>'トンガ','TV'=>'ツバル','VU'=>'バヌアツ','FM'=>'ミクロネシア連邦','MH'=>'マーシャル諸島','PW'=>'パラオ','KI'=>'キリバス','NR'=>'ナウル', + ]; + + $regionByCode = []; + foreach ($regions as $regionName => $codes) { + foreach ($codes as $code) { + $regionByCode[$code] = $regionName; + } + } + + $rows = array_map(function ($c) use ($regionByCode, $nameJp) { + $code = $c[0]; + return [ + 'state_party_code' => $code, + 'name_en' => $c[1], + 'name_jp' => $nameJp[$code] ?? null, + 'region' => $regionByCode[$code] ?? null, + ]; + }, $countries); + + Country::query()->upsert( + $rows, + ['state_party_code'], + ['name_en','name_jp','region'] + ); + } +} From 4b60e85abb605d18509c7b60fb9b06e6045449fa Mon Sep 17 00:00:00 2001 From: Application-drop-up Date: Sat, 23 Aug 2025 18:12:25 +0900 Subject: [PATCH 4/4] feat: Infrastructure layer changes to enable registration of multi-country World Heritage sites --- .../WorldHeritageRepository_insertTest.php | 267 ++++++++++++++---- .../Domains/WorldHeritageRepository.php | 104 ++++++- .../WorldHeritageRepositoryInterface.php | 4 + 3 files changed, 309 insertions(+), 66 deletions(-) diff --git a/src/app/Packages/Domains/Test/Repository/WorldHeritageRepository_insertTest.php b/src/app/Packages/Domains/Test/Repository/WorldHeritageRepository_insertTest.php index 2693653..69a1f3f 100644 --- a/src/app/Packages/Domains/Test/Repository/WorldHeritageRepository_insertTest.php +++ b/src/app/Packages/Domains/Test/Repository/WorldHeritageRepository_insertTest.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\DB; use Tests\TestCase; use App\Models\WorldHeritage; +use Database\Seeders\CountrySeeder; class WorldHeritageRepository_insertTest extends TestCase { @@ -15,7 +16,8 @@ protected function setUp(): void { parent::setUp(); $this->refresh(); - + $seeder = new CountrySeeder(); + $seeder->run(); $this->repository = app(WorldHeritageRepository::class); } @@ -34,7 +36,7 @@ private function refresh(): void } } - private static function arrayData(): array + private static function arraySingleData(): array { return [ 'unesco_id' => '668', @@ -43,9 +45,9 @@ private static function arrayData(): array 'name_jp' => '古都奈良の文化財', 'country' => 'Japan', 'region' => 'Asia', - 'state_party' => 'JP', 'category' => 'cultural', 'criteria' => ['ii', 'iii', 'v'], + 'state_party' => null, 'year_inscribed' => 1998, 'area_hectares' => 442.0, 'buffer_zone_hectares' => 320.0, @@ -55,31 +57,167 @@ private static function arrayData(): array 'short_description' => 'Temples and shrines of the first permanent capital of Japan.', 'image_url' => '', 'unesco_site_url' => 'https://whc.unesco.org/en/list/668/', + 'state_parties' => ['JP'], + 'state_parties_meta' => [ + 'JP' => [ + 'is_primary' => true, + 'inscription_year' => 1998, + ], + ], ]; } - public function test_insert_check_type(): void + private static function arrayMultiData(): array + { + return [ + 'unesco_id' => 1133, + 'official_name' => "Ancient and Primeval Beech Forests of the Carpathians and Other Regions of Europe", + 'name' => "Ancient and Primeval Beech Forests", + 'name_jp' => null, + 'country' => 'Slovakia', + 'region' => 'Europe', + 'category' => 'natural', + 'criteria' => ['ix'], + 'state_party' => null, + 'year_inscribed' => 2007, + 'area_hectares' => 99947.81, + 'buffer_zone_hectares' => 296275.8, + 'is_endangered' => false, + 'latitude' => 0.0, + 'longitude' => 0.0, + 'short_description' => 'Transnational serial property of European beech forests illustrating post-glacial expansion and ecological processes across Europe.', + 'image_url' => '', + 'unesco_site_url' => 'https://whc.unesco.org/en/list/1133/', + 'state_parties' => [ + 'AL','AT','BE','BA','BG','HR','CZ','FR','DE','IT','MK','PL','RO','SK','SI','ES','CH','UA' + ], + 'state_parties_meta' => [ + 'AL' => ['is_primary' => false, 'inscription_year' => 2007], + 'AT' => ['is_primary' => false, 'inscription_year' => 2007], + 'BE' => ['is_primary' => false, 'inscription_year' => 2007], + 'BA' => ['is_primary' => false, 'inscription_year' => 2007], + 'BG' => ['is_primary' => false, 'inscription_year' => 2007], + 'HR' => ['is_primary' => false, 'inscription_year' => 2007], + 'CZ' => ['is_primary' => false, 'inscription_year' => 2007], + 'FR' => ['is_primary' => false, 'inscription_year' => 2007], + 'DE' => ['is_primary' => false, 'inscription_year' => 2007], + 'IT' => ['is_primary' => false, 'inscription_year' => 2007], + 'MK' => ['is_primary' => false, 'inscription_year' => 2007], + 'PL' => ['is_primary' => false, 'inscription_year' => 2007], + 'RO' => ['is_primary' => false, 'inscription_year' => 2007], + 'SK' => ['is_primary' => true, 'inscription_year' => 2007], + 'SI' => ['is_primary' => false, 'inscription_year' => 2007], + 'ES' => ['is_primary' => false, 'inscription_year' => 2007], + 'CH' => ['is_primary' => false, 'inscription_year' => 2007], + 'UA' => ['is_primary' => false, 'inscription_year' => 2007], + ], + ]; + } + + public function test_insert_check_single_type(): void + { + $entity = new WorldHeritageEntity( + self::arraySingleData()['id'] ?? null, + self::arraySingleData()['unesco_id'], + self::arraySingleData()['official_name'], + self::arraySingleData()['name'], + self::arraySingleData()['country'], + self::arraySingleData()['region'], + self::arraySingleData()['category'], + self::arraySingleData()['year_inscribed'], + self::arraySingleData()['latitude'], + self::arraySingleData()['longitude'], + self::arraySingleData()['is_endangered'], + self::arraySingleData()['name_jp'], + self::arraySingleData()['state_party'], + self::arraySingleData()['criteria'], + self::arraySingleData()['area_hectares'], + self::arraySingleData()['buffer_zone_hectares'], + self::arraySingleData()['short_description'], + self::arraySingleData()['image_url'], + self::arraySingleData()['unesco_site_url'], + self::arraySingleData()['state_parties'], + self::arraySingleData()['state_parties_meta'] + ); + + $result = $this->repository->insertHeritage($entity); + + $this->assertInstanceOf(WorldHeritageEntity::class, $result); + } + + public function test_insert_check_single_value(): void { $entity = new WorldHeritageEntity( - null, - self::arrayData()['unesco_id'], - self::arrayData()['official_name'], - self::arrayData()['name'], - self::arrayData()['country'], - self::arrayData()['region'], - self::arrayData()['category'], - self::arrayData()['year_inscribed'], - self::arrayData()['is_endangered'], - self::arrayData()['latitude'], - self::arrayData()['longitude'], - self::arrayData()['name_jp'], - self::arrayData()['state_party'], - self::arrayData()['criteria'], - self::arrayData()['area_hectares'], - self::arrayData()['buffer_zone_hectares'], - self::arrayData()['short_description'], - self::arrayData()['image_url'], - self::arrayData()['unesco_site_url'] + self::arraySingleData()['id'] ?? null, + self::arraySingleData()['unesco_id'], + self::arraySingleData()['official_name'], + self::arraySingleData()['name'], + self::arraySingleData()['country'], + self::arraySingleData()['region'], + self::arraySingleData()['category'], + self::arraySingleData()['year_inscribed'], + self::arraySingleData()['latitude'], + self::arraySingleData()['longitude'], + self::arraySingleData()['is_endangered'], + self::arraySingleData()['name_jp'], + self::arraySingleData()['state_party'], + self::arraySingleData()['criteria'], + self::arraySingleData()['area_hectares'], + self::arraySingleData()['buffer_zone_hectares'], + self::arraySingleData()['short_description'], + self::arraySingleData()['image_url'], + self::arraySingleData()['unesco_site_url'], + self::arraySingleData()['state_parties'], + self::arraySingleData()['state_parties_meta'] + ); + + $result = $this->repository->insertHeritage($entity); + + $this->assertEquals(self::arraySingleData()['unesco_id'], $result->getUnescoId()); + $this->assertEquals(self::arraySingleData()['official_name'], $result->getOfficialName()); + $this->assertEquals(self::arraySingleData()['name'], $result->getName()); + $this->assertEquals(self::arraySingleData()['country'], $result->getCountry()); + $this->assertEquals(self::arraySingleData()['region'], $result->getRegion()); + $this->assertEquals(self::arraySingleData()['category'], $result->getCategory()); + $this->assertEquals(self::arraySingleData()['year_inscribed'], $result->getYearInscribed()); + $this->assertEquals(self::arraySingleData()['latitude'], $result->getLatitude()); + $this->assertEquals(self::arraySingleData()['longitude'], $result->getLongitude()); + $this->assertEquals(self::arraySingleData()['is_endangered'], $result->isEndangered()); + $this->assertEquals(self::arraySingleData()['name_jp'], $result->getNameJp()); + $this->assertEquals(self::arraySingleData()['criteria'], $result->getCriteria()); + $this->assertEquals(self::arraySingleData()['area_hectares'], $result->getAreaHectares()); + $this->assertEquals(self::arraySingleData()['buffer_zone_hectares'], $result->getBufferZoneHectares()); + $this->assertEquals(self::arraySingleData()['short_description'], $result->getShortDescription()); + $this->assertEquals(self::arraySingleData()['image_url'], $result->getImageUrl()); + $this->assertEquals(self::arraySingleData()['unesco_site_url'], $result->getUnescoSiteUrl()); + $this->assertEquals(self::arraySingleData()['state_parties'], $result->getStatePartyCodes()); + $this->assertEquals(self::arraySingleData()['state_parties_meta'], $result->getStatePartyMeta()); + } + + public function test_insert_check_multi_type(): void + { + $entity = new WorldHeritageEntity( + self::arrayMultiData()['id'] ?? null, + self::arrayMultiData()['unesco_id'], + self::arrayMultiData()['official_name'], + self::arrayMultiData()['name'], + self::arrayMultiData()['country'], + self::arrayMultiData()['region'], + self::arrayMultiData()['category'], + self::arrayMultiData()['year_inscribed'], + self::arrayMultiData()['is_endangered'], + self::arrayMultiData()['latitude'], + self::arrayMultiData()['longitude'], + self::arrayMultiData()['name_jp'], + self::arrayMultiData()['state_party'], + self::arrayMultiData()['criteria'], + self::arrayMultiData()['area_hectares'], + self::arrayMultiData()['buffer_zone_hectares'], + self::arrayMultiData()['short_description'], + self::arrayMultiData()['image_url'], + self::arrayMultiData()['unesco_site_url'], + self::arrayMultiData()['state_parties'], + self::arrayMultiData()['state_parties_meta'] ); $result = $this->repository->insertHeritage($entity); @@ -87,49 +225,56 @@ public function test_insert_check_type(): void $this->assertInstanceOf(WorldHeritageEntity::class, $result); } - public function test_insert_check_value(): void + public function test_insert_check_multi_value(): void { $entity = new WorldHeritageEntity( - null, - self::arrayData()['unesco_id'], - self::arrayData()['official_name'], - self::arrayData()['name'], - self::arrayData()['country'], - self::arrayData()['region'], - self::arrayData()['category'], - self::arrayData()['year_inscribed'], - self::arrayData()['latitude'], - self::arrayData()['longitude'], - self::arrayData()['is_endangered'], - self::arrayData()['name_jp'], - self::arrayData()['state_party'], - self::arrayData()['criteria'], - self::arrayData()['area_hectares'], - self::arrayData()['buffer_zone_hectares'], - self::arrayData()['short_description'], - self::arrayData()['image_url'], - self::arrayData()['unesco_site_url'] + self::arrayMultiData()['id'] ?? null, + self::arrayMultiData()['unesco_id'], + self::arrayMultiData()['official_name'], + self::arrayMultiData()['name'], + self::arrayMultiData()['country'], + self::arrayMultiData()['region'], + self::arrayMultiData()['category'], + self::arrayMultiData()['year_inscribed'], + self::arrayMultiData()['is_endangered'], + self::arrayMultiData()['latitude'], + self::arrayMultiData()['longitude'], + self::arrayMultiData()['name_jp'], + self::arrayMultiData()['state_party'], + self::arrayMultiData()['criteria'], + self::arrayMultiData()['area_hectares'], + self::arrayMultiData()['buffer_zone_hectares'], + self::arrayMultiData()['short_description'], + self::arrayMultiData()['image_url'], + self::arrayMultiData()['unesco_site_url'], + self::arrayMultiData()['state_parties'], + self::arrayMultiData()['state_parties_meta'] ); $result = $this->repository->insertHeritage($entity); - $this->assertEquals(self::arrayData()['unesco_id'], $result->getUnescoId()); - $this->assertEquals(self::arrayData()['official_name'], $result->getOfficialName()); - $this->assertEquals(self::arrayData()['name'], $result->getName()); - $this->assertEquals(self::arrayData()['name_jp'], $result->getNameJp()); - $this->assertEquals(self::arrayData()['country'], $result->getCountry()); - $this->assertEquals(self::arrayData()['region'], $result->getRegion()); - $this->assertEquals(self::arrayData()['state_party'], $result->getStateParty()); - $this->assertEquals(self::arrayData()['category'], $result->getCategory()); - $this->assertEquals(self::arrayData()['criteria'], $result->getCriteria()); - $this->assertEquals(self::arrayData()['year_inscribed'], $result->getYearInscribed()); - $this->assertEquals(self::arrayData()['area_hectares'], $result->getAreaHectares()); - $this->assertEquals(self::arrayData()['buffer_zone_hectares'], $result->getBufferZoneHectares()); - $this->assertEquals(self::arrayData()['is_endangered'], $result->isEndangered()); - $this->assertEquals(self::arrayData()['latitude'], $result->getLatitude()); - $this->assertEquals(self::arrayData()['longitude'], $result->getLongitude()); - $this->assertEquals(self::arrayData()['short_description'], $result->getShortDescription()); - $this->assertEquals(self::arrayData()['image_url'], $result->getImageUrl()); - $this->assertEquals(self::arrayData()['unesco_site_url'], $result->getUnescoSiteUrl()); + $this->assertEquals(self::arrayMultiData()['unesco_id'], $result->getUnescoId()); + $this->assertEquals(self::arrayMultiData()['official_name'], $result->getOfficialName()); + $this->assertEquals(self::arrayMultiData()['name'], $result->getName()); + $this->assertEquals(self::arrayMultiData()['country'], $result->getCountry()); + $this->assertEquals(self::arrayMultiData()['region'], $result->getRegion()); + $this->assertEquals(self::arrayMultiData()['category'], $result->getCategory()); + $this->assertEquals(self::arrayMultiData()['year_inscribed'], $result->getYearInscribed()); + $this->assertEquals(self::arrayMultiData()['is_endangered'], $result->isEndangered()); + $this->assertEquals(self::arrayMultiData()['latitude'], $result->getLatitude()); + $this->assertEquals(self::arrayMultiData()['longitude'], $result->getLongitude()); + $this->assertEquals(self::arrayMultiData()['name_jp'], $result->getNameJp()); + $this->assertEquals(self::arrayMultiData()['criteria'], $result->getCriteria()); + $this->assertEquals(self::arrayMultiData()['area_hectares'], $result->getAreaHectares()); + $this->assertEquals(self::arrayMultiData()['buffer_zone_hectares'], $result->getBufferZoneHectares()); + $this->assertEquals(self::arrayMultiData()['short_description'], $result->getShortDescription()); + $this->assertEquals(self::arrayMultiData()['image_url'], $result->getImageUrl()); + $this->assertEquals(self::arrayMultiData()['unesco_site_url'], $result->getUnescoSiteUrl()); + $this->assertEqualsCanonicalizing(self::arrayMultiData()['state_parties'], $result->getStatePartyCodes()); + $this->assertEquals(self::arrayMultiData()['state_parties_meta'], $result->getStatePartyMeta()); + $this->assertEqualsCanonicalizing( + self::arrayMultiData()['state_parties_meta']['SK'], + $entity->getStatePartyMeta()['SK'] + ); } } \ No newline at end of file diff --git a/src/app/Packages/Domains/WorldHeritageRepository.php b/src/app/Packages/Domains/WorldHeritageRepository.php index b208b81..0b8457f 100644 --- a/src/app/Packages/Domains/WorldHeritageRepository.php +++ b/src/app/Packages/Domains/WorldHeritageRepository.php @@ -26,7 +26,6 @@ public function insertHeritage( 'longitude' => $entity->getLongitude(), 'is_endangered' => $entity->isEndangered(), 'name_jp' => $entity->getNameJp(), - 'state_party' => $entity->getStateParty(), 'criteria' => $entity->getCriteria(), 'area_hectares' => $entity->getAreaHectares(), 'buffer_zone_hectares' => $entity->getBufferZoneHectares(), @@ -37,8 +36,34 @@ public function insertHeritage( $heritage = $this->model->create($insertValue); - if (!$heritage) { - throw new Exception('Failed to insert heritage'); + $codes = $entity->getStatePartyCodes() ?: $entity->getStatePartyCodesOrFallback(); + $codes = array_values(array_unique(array_map('strtoupper', $codes))); + + $meta = $entity->getStatePartyMeta(); + if (!empty($meta)) { + $payload = []; + foreach ($codes as $code) { + $m = $meta[$code] ?? []; + $payload[$code] = [ + 'is_primary' => (bool)($m['is_primary'] ?? false), + 'inscription_year' => $m['inscription_year'] ?? null, + ]; + } + $heritage->countries()->sync($payload); + } else { + $heritage->countries()->sync($codes); + } + + $heritage->state_party = $code ? implode(', ', $codes) : null; + $heritage->save(); + + $partyMeta = []; + + foreach ($heritage->countries as $country) { + $partyMeta[$country->state_party_code] = [ + 'is_primary' => (bool) data_get($country, 'pivot.is_primary', false), + 'inscription_year' => data_get($country, 'pivot.inscription_year'), + ]; } return new WorldHeritageEntity( @@ -60,7 +85,9 @@ public function insertHeritage( bufferZoneHectares: $heritage->buffer_zone_hectares, shortDescription: $heritage->short_description, imageUrl: $heritage->image_url, - unescoSiteUrl: $heritage->unesco_site_url + unescoSiteUrl: $heritage->unesco_site_url, + statePartyCodes: $heritage->countries->pluck('state_party_code')->all(), + statePartyMeta: $partyMeta ); } @@ -76,4 +103,71 @@ public function insertHeritages( return $newCollection; } -} \ No newline at end of file + +// public function updateOneHeritage( +// WorldHeritageEntity $entity +// ): WorldHeritageEntity +// { +// $targetEntity = $this->model->find($entity->getUnescoId()); +// +// if (!$targetEntity) { +// throw new Exception('Heritage was not found'); +// } +// +// $updateValue = [ +// 'id' => $entity->getId(), +// 'unesco_id' => $entity->getUnescoId(), +// 'official_name' => $entity->getOfficialName(), +// 'name' => $entity->getName(), +// 'country' => $entity->getCountry(), +// 'region' => $entity->getRegion(), +// 'category' => $entity->getCategory(), +// 'year_inscribed' => $entity->getYearInscribed(), +// 'latitude' => $entity->getLatitude(), +// 'longitude' => $entity->getLongitude(), +// 'is_endangered' => $entity->isEndangered(), +// 'name_jp' => $entity->getNameJp(), +// 'state_party' => $entity->getStateParty(), +// 'criteria' => $entity->getCriteria(), +// 'area_hectares' => $entity->getAreaHectares(), +// 'buffer_zone_hectares' => $entity->getBufferZoneHectares(), +// 'short_description' => $entity->getShortDescription(), +// 'image_url' => $entity->getImageUrl(), +// 'unesco_site_url' => $entity->getUnescoSiteUrl() +// ]; +// +// $codes = method_exists($entity, 'getStatePartyCodes') +// ? (array) $entity->getStatePartyCodes() +// : $this->parseStatePartyString((string) $entity->getStateParty()); +// +// $updatedHeritage = $this->model->updateOrFail( +// $updateValue +// ); +// +// if (!$updatedHeritage) { +// throw new Exception('Failed to update heritage'); +// } +// +// return new WorldHeritageEntity( +// id: $updateValue['id'], +// unescoId: $updateValue['unesco_id'], +// officialName: $updateValue['official_name'], +// name: $updateValue['name'], +// country: $updateValue['country'], +// region: $updateValue['region'], +// category: $updateValue['category'], +// yearInscribed: $updateValue['year_inscribed'], +// latitude: $updateValue['latitude'], +// longitude: $updateValue['longitude'], +// isEndangered: $updateValue['is_endangered'], +// nameJp: $updateValue['name_jp'], +// stateParty: $updateValue['state_party'], +// criteria: $updateValue['criteria'], +// areaHectares: $updateValue['area_hectares'], +// bufferZoneHectares: $updateValue['buffer_zone_hectares'], +// shortDescription: $updateValue['short_description'], +// imageUrl: $updateValue['image_url'], +// unescoSiteUrl: $updateValue['unesco_site_url'] +// ); +// } + } \ No newline at end of file diff --git a/src/app/Packages/Domains/WorldHeritageRepositoryInterface.php b/src/app/Packages/Domains/WorldHeritageRepositoryInterface.php index f026a99..1334865 100644 --- a/src/app/Packages/Domains/WorldHeritageRepositoryInterface.php +++ b/src/app/Packages/Domains/WorldHeritageRepositoryInterface.php @@ -11,4 +11,8 @@ public function insertHeritage( public function insertHeritages( WorldHeritageEntityCollection $collection ): WorldHeritageEntityCollection; + +// public function updateOneHeritage( +// WorldHeritageEntity $entity +// ): WorldHeritageEntity; } \ No newline at end of file