Skip to content

Commit 17f2969

Browse files
committed
fix: repository & test datas
1 parent e08aac9 commit 17f2969

5 files changed

Lines changed: 318 additions & 28 deletions

File tree

src/app/Packages/Domains/WorldHeritageRepository.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
use App\Models\WorldHeritage;
66
use App\Models\Country;
7-
use Exception;
8-
97
readonly class WorldHeritageRepository implements WorldHeritageRepositoryInterface
108
{
119
public function __construct(
@@ -18,7 +16,7 @@ public function insertHeritage(
1816
): WorldHeritageEntity {
1917

2018
$insertValue = [
21-
'unesco_id' => $entity->getUnescoId(),
19+
'id' => $entity->getId(),
2220
'official_name' => $entity->getOfficialName(),
2321
'name' => $entity->getName(),
2422
'country' => $entity->getCountry(),
@@ -76,7 +74,7 @@ public function insertHeritage(
7674
}
7775

7876
$heritage->state_party = !empty($codes) ? implode(',', $codes) : null;
79-
$heritage->save();
77+
8078
$heritage->load(['countries' => function ($q) {
8179
$q->withPivot(['is_primary', 'inscription_year']);
8280
}]);
@@ -91,7 +89,6 @@ public function insertHeritage(
9189

9290
return new WorldHeritageEntity(
9391
id: $heritage->id,
94-
unescoId: $heritage->unesco_id,
9592
officialName: $heritage->official_name,
9693
name: $heritage->name,
9794
country: $heritage->country,
@@ -102,14 +99,15 @@ public function insertHeritage(
10299
longitude: $heritage->longitude,
103100
isEndangered: $heritage->is_endangered,
104101
nameJp: $heritage->name_jp,
105-
stateParty: $heritage->state_party,
106102
criteria: $heritage->criteria,
107103
areaHectares: $heritage->area_hectares,
108104
bufferZoneHectares: $heritage->buffer_zone_hectares,
109105
shortDescription: $heritage->short_description,
110106
imageUrl: $heritage->image_url,
111107
unescoSiteUrl: $heritage->unesco_site_url,
112-
statePartyCodes: $this->parseStateParty($heritage->state_party),
108+
statePartyCodes: $this->parseStateParty(
109+
implode(',', $heritage->countries->pluck('state_party_code')->all())
110+
),
113111
statePartyMeta: $partyMeta
114112
);
115113
}
@@ -194,13 +192,14 @@ public function insertHeritages(
194192
// );
195193
// }
196194

197-
private function parseStateParty(?string $stored): array
195+
private function parseStateParty(?string $party): array
198196
{
199-
if ($stored === null || $stored === '') return [];
197+
if ($party === null || $party === '') return [];
200198

201-
$parts = array_map('trim', explode(',', $stored));
199+
$parts = array_map('trim', explode(',', $party));
202200
$parts = array_filter($parts, static fn($v) => $v !== '');
203201
$parts = array_map('strtoupper', $parts);
202+
204203
return array_values(array_unique($parts));
205204
}
206205
}

src/database/seeders/CountrySeeder.php

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
use Illuminate\Database\Seeder;
66
use App\Models\Country;
7+
use RuntimeException;
78

89
class CountrySeeder extends Seeder
910
{
1011
public function run(): void
1112
{
12-
$countries = [
13+
$countriesIso2 = [
1314
['AF','Afghanistan'], ['AL','Albania'], ['DZ','Algeria'], ['AD','Andorra'], ['AO','Angola'],
1415
['AG','Antigua and Barbuda'], ['AR','Argentina'], ['AM','Armenia'], ['AU','Australia'], ['AT','Austria'],
1516
['AZ','Azerbaijan'], ['BS','Bahamas'], ['BH','Bahrain'], ['BD','Bangladesh'], ['BB','Barbados'],
@@ -52,7 +53,30 @@ public function run(): void
5253
['VA','Holy See'], ['PS','State of Palestine'],
5354
];
5455

55-
$regions = [
56+
$iso2to3 = [
57+
'AF'=>'AFG','AL'=>'ALB','DZ'=>'DZA','AD'=>'AND','AO'=>'AGO','AG'=>'ATG','AR'=>'ARG','AM'=>'ARM','AU'=>'AUS','AT'=>'AUT',
58+
'AZ'=>'AZE','BS'=>'BHS','BH'=>'BHR','BD'=>'BGD','BB'=>'BRB','BY'=>'BLR','BE'=>'BEL','BZ'=>'BLZ','BJ'=>'BEN','BT'=>'BTN',
59+
'BO'=>'BOL','BA'=>'BIH','BW'=>'BWA','BR'=>'BRA','BN'=>'BRN','BG'=>'BGR','BF'=>'BFA','BI'=>'BDI','CV'=>'CPV','KH'=>'KHM',
60+
'CM'=>'CMR','CA'=>'CAN','CF'=>'CAF','TD'=>'TCD','CL'=>'CHL','CN'=>'CHN','CO'=>'COL','KM'=>'COM','CG'=>'COG','CD'=>'COD',
61+
'CR'=>'CRI','CI'=>'CIV','HR'=>'HRV','CU'=>'CUB','CY'=>'CYP','CZ'=>'CZE','DK'=>'DNK','DJ'=>'DJI','DM'=>'DMA','DO'=>'DOM',
62+
'EC'=>'ECU','EG'=>'EGY','SV'=>'SLV','GQ'=>'GNQ','ER'=>'ERI','EE'=>'EST','SZ'=>'SWZ','ET'=>'ETH','FJ'=>'FJI','FI'=>'FIN',
63+
'FR'=>'FRA','GA'=>'GAB','GM'=>'GMB','GE'=>'GEO','DE'=>'DEU','GH'=>'GHA','GR'=>'GRC','GD'=>'GRD','GT'=>'GTM','GN'=>'GIN',
64+
'GW'=>'GNB','GY'=>'GUY','HT'=>'HTI','HN'=>'HND','HU'=>'HUN','IS'=>'ISL','IN'=>'IND','ID'=>'IDN','IR'=>'IRN','IQ'=>'IRQ',
65+
'IE'=>'IRL','IL'=>'ISR','IT'=>'ITA','JM'=>'JAM','JP'=>'JPN','JO'=>'JOR','KZ'=>'KAZ','KE'=>'KEN','KI'=>'KIR','KP'=>'PRK',
66+
'KR'=>'KOR','KW'=>'KWT','KG'=>'KGZ','LA'=>'LAO','LV'=>'LVA','LB'=>'LBN','LS'=>'LSO','LR'=>'LBR','LY'=>'LBY','LI'=>'LIE',
67+
'LT'=>'LTU','LU'=>'LUX','MG'=>'MDG','MW'=>'MWI','MY'=>'MYS','MV'=>'MDV','ML'=>'MLI','MT'=>'MLT','MH'=>'MHL','MR'=>'MRT',
68+
'MU'=>'MUS','MX'=>'MEX','FM'=>'FSM','MD'=>'MDA','MC'=>'MCO','MN'=>'MNG','ME'=>'MNE','MA'=>'MAR','MZ'=>'MOZ','MM'=>'MMR',
69+
'NA'=>'NAM','NR'=>'NRU','NP'=>'NPL','NL'=>'NLD','NZ'=>'NZL','NI'=>'NIC','NE'=>'NER','NG'=>'NGA','MK'=>'MKD','NO'=>'NOR',
70+
'OM'=>'OMN','PK'=>'PAK','PW'=>'PLW','PA'=>'PAN','PG'=>'PNG','PY'=>'PRY','PE'=>'PER','PH'=>'PHL','PL'=>'POL','PT'=>'PRT',
71+
'QA'=>'QAT','RO'=>'ROU','RU'=>'RUS','RW'=>'RWA','KN'=>'KNA','LC'=>'LCA','VC'=>'VCT','WS'=>'WSM','SM'=>'SMR','ST'=>'STP',
72+
'SA'=>'SAU','SN'=>'SEN','RS'=>'SRB','SC'=>'SYC','SL'=>'SLE','SG'=>'SGP','SK'=>'SVK','SI'=>'SVN','SB'=>'SLB','SO'=>'SOM',
73+
'ZA'=>'ZAF','SS'=>'SSD','ES'=>'ESP','LK'=>'LKA','SD'=>'SDN','SR'=>'SUR','SE'=>'SWE','CH'=>'CHE','SY'=>'SYR','TJ'=>'TJK',
74+
'TH'=>'THA','TL'=>'TLS','TG'=>'TGO','TO'=>'TON','TT'=>'TTO','TN'=>'TUN','TR'=>'TUR','TM'=>'TKM','TV'=>'TUV','UG'=>'UGA',
75+
'UA'=>'UKR','AE'=>'ARE','GB'=>'GBR','TZ'=>'TZA','US'=>'USA','UY'=>'URY','UZ'=>'UZB','VU'=>'VUT','VE'=>'VEN','VN'=>'VNM',
76+
'YE'=>'YEM','ZM'=>'ZMB','ZW'=>'ZWE','VA'=>'VAT','PS'=>'PSE',
77+
];
78+
79+
$regionsIso2 = [
5680
'Africa' => [
5781
'DZ','AO','BJ','BF','BI','CV','CM','CF','TD','KM','CG','CD','CI','DJ','EG','GQ','ER','SZ','ET','GA','GM','GH','GN','GW',
5882
'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',
@@ -71,7 +95,7 @@ public function run(): void
7195
],
7296
];
7397

74-
$nameJp = [
98+
$nameJpIso2 = [
7599
'JP'=>'日本','CN'=>'中国','KR'=>'大韓民国','KP'=>'朝鮮民主主義人民共和国','TW'=> '台湾',
76100
'SG'=>'シンガポール','MY'=>'マレーシア','TH'=>'タイ','VN'=>'ベトナム','PH'=>'フィリピン','ID'=>'インドネシア',
77101
'LA'=>'ラオス','KH'=>'カンボジア','MM'=>'ミャンマー','LK'=>'スリランカ','IN'=>'インド','BD'=>'バングラデシュ',
@@ -89,22 +113,31 @@ public function run(): void
89113
'AU'=>'オーストラリア','NZ'=>'ニュージーランド','PG'=>'パプアニューギニア','FJ'=>'フィジー','WS'=>'サモア','SB'=>'ソロモン諸島','TO'=>'トンガ','TV'=>'ツバル','VU'=>'バヌアツ','FM'=>'ミクロネシア連邦','MH'=>'マーシャル諸島','PW'=>'パラオ','KI'=>'キリバス','NR'=>'ナウル',
90114
];
91115

92-
$regionByCode = [];
93-
foreach ($regions as $regionName => $codes) {
94-
foreach ($codes as $code) {
95-
$regionByCode[$code] = $regionName;
116+
$countriesIso3 = array_map(function ($c) use ($iso2to3, $nameJpIso2) {
117+
[$code2, $nameEn] = $c;
118+
$code3 = $iso2to3[$code2] ?? null;
119+
if (!$code3) {
120+
throw new RuntimeException("ISO2 code {$code2} has no ISO3 mapping.");
96121
}
97-
}
98-
99-
$rows = array_map(function ($c) use ($regionByCode, $nameJp) {
100-
$code = $c[0];
101122
return [
102-
'state_party_code' => $code,
103-
'name_en' => $c[1],
104-
'name_jp' => $nameJp[$code] ?? null,
105-
'region' => $regionByCode[$code] ?? null,
123+
'state_party_code' => $code3,
124+
'name_en' => $nameEn,
125+
'name_jp' => $nameJpIso2[$code2] ?? null,
106126
];
107-
}, $countries);
127+
}, $countriesIso2);
128+
129+
$regionByIso3 = [];
130+
foreach ($regionsIso2 as $regionName => $codes2) {
131+
foreach ($codes2 as $code2) {
132+
$code3 = $iso2to3[$code2] ?? null;
133+
if ($code3) $regionByIso3[$code3] = $regionName;
134+
}
135+
}
136+
137+
$rows = array_map(function ($row) use ($regionByIso3) {
138+
$row['region'] = $regionByIso3[$row['state_party_code']] ?? null;
139+
return $row;
140+
}, $countriesIso3);
108141

109142
Country::query()->upsert(
110143
$rows,

src/database/seeders/DatabaseSeeder.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Database\Seeders;
44

5-
use App\Models\WorldHeritage;
65
use Illuminate\Database\Seeder;
76

87
class DatabaseSeeder extends Seeder
@@ -12,6 +11,10 @@ class DatabaseSeeder extends Seeder
1211
*/
1312
public function run(): void
1413
{
15-
WorldHeritage::class::factory(10)->create();
14+
$this->call([
15+
WorldHeritageSeeder::class,
16+
CountrySeeder::class,
17+
SiteStatePartySeeder::class,
18+
]);
1619
}
1720
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Database\Seeders;
4+
5+
use Illuminate\Support\Facades\DB;
6+
use Illuminate\Database\Seeder;
7+
use Carbon\Carbon;
8+
9+
class SiteStatePartySeeder extends Seeder
10+
{
11+
/**
12+
* Run the database seeds.
13+
*/
14+
public function run(): void
15+
{
16+
$now = Carbon::now();
17+
18+
$pivots = [
19+
['state_party_code'=>'SVK','world_heritage_site_id'=>1133,'is_primary'=>true ,'inscription_year'=>2007,'created_at'=>$now,'updated_at'=>$now],
20+
['state_party_code'=>'DEU','world_heritage_site_id'=>1133,'is_primary'=>false,'inscription_year'=>2011,'created_at'=>$now,'updated_at'=>$now],
21+
['state_party_code'=>'UKR','world_heritage_site_id'=>1133,'is_primary'=>false,'inscription_year'=>2007,'created_at'=>$now,'updated_at'=>$now],
22+
['state_party_code'=>'POL','world_heritage_site_id'=>1133,'is_primary'=>false,'inscription_year'=>2021,'created_at'=>$now,'updated_at'=>$now],
23+
['state_party_code'=>'ROU','world_heritage_site_id'=>1133,'is_primary'=>false,'inscription_year'=>2017,'created_at'=>$now,'updated_at'=>$now],
24+
['state_party_code'=>'CHN','world_heritage_site_id'=>1442,'is_primary'=>true ,'inscription_year'=>2014,'created_at'=>$now,'updated_at'=>$now],
25+
['state_party_code'=>'KAZ','world_heritage_site_id'=>1442,'is_primary'=>false,'inscription_year'=>2014,'created_at'=>$now,'updated_at'=>$now],
26+
['state_party_code'=>'KGZ','world_heritage_site_id'=>1442,'is_primary'=>false,'inscription_year'=>2014,'created_at'=>$now,'updated_at'=>$now],
27+
['state_party_code'=>'UZB','world_heritage_site_id'=>1662,'is_primary'=>true ,'inscription_year'=>2023,'created_at'=>$now,'updated_at'=>$now],
28+
['state_party_code'=>'TJK','world_heritage_site_id'=>1662,'is_primary'=>false,'inscription_year'=>2023,'created_at'=>$now,'updated_at'=>$now],
29+
['state_party_code'=>'TKM','world_heritage_site_id'=>1662,'is_primary'=>false,'inscription_year'=>2023,'created_at'=>$now,'updated_at'=>$now],
30+
['state_party_code'=>'JPN','world_heritage_site_id'=>661 ,'is_primary'=>true,'inscription_year'=>1993,'created_at'=>$now,'updated_at'=>$now],
31+
['state_party_code'=>'JPN','world_heritage_site_id'=>688 ,'is_primary'=>true,'inscription_year'=>1994,'created_at'=>$now,'updated_at'=>$now],
32+
['state_party_code'=>'JPN','world_heritage_site_id'=>662 ,'is_primary'=>true,'inscription_year'=>1993,'created_at'=>$now,'updated_at'=>$now],
33+
['state_party_code'=>'JPN','world_heritage_site_id'=>663 ,'is_primary'=>true,'inscription_year'=>1993,'created_at'=>$now,'updated_at'=>$now],
34+
['state_party_code'=>'JPN','world_heritage_site_id'=>1142,'is_primary'=>true,'inscription_year'=>2004,'created_at'=>$now,'updated_at'=>$now],
35+
['state_party_code'=>'JPN','world_heritage_site_id'=>1418,'is_primary'=>true,'inscription_year'=>2013,'created_at'=>$now,'updated_at'=>$now],
36+
];
37+
38+
DB::table('site_state_parties')->upsert(
39+
$pivots,
40+
['state_party_code','world_heritage_site_id'],
41+
['is_primary','inscription_year','updated_at']
42+
);
43+
}
44+
}

0 commit comments

Comments
 (0)