where('sub_district_id', $subDistrictId)->get(); if (count($villageBySubDistrictId) > 0) { set_time_limit(300); try { foreach ($villageBySubDistrictId as $village) { $responsePh = Http::retry(3, 1000)->get("https://rest.isric.org/soilgrids/v2.0/properties/query?lon={$village['longitude']}&lat={$village['latitude']}&property=phh2o"); // Periksa apakah respons sukses (status kode 200) if (!$responsePh->successful()) { throw new Exception("Gagal mendapatkan data dari API"); } // Ambil data JSON dari respons $phDataAPI = $responsePh->json()['properties']['layers'][0]['depths']; // Inisialisasi array dengan nilai default $phData = [ 'village_id' => $village['id'], 'meter_0_5' => null, 'meter_5_15' => null, 'meter_15_30' => null, 'meter_30_60' => null, 'meter_60_100' => null, 'meter_100_200' => null, ]; // Looping untuk membaca data dari array foreach ($phDataAPI as $value) { $meanValue = ($value['values']['mean'] ?? 55) / 10; // Jika null, gunakan 0 switch ($value['label']) { case '0-5cm': $phData['meter_0_5'] = $meanValue; break; case '5-15cm': $phData['meter_5_15'] = $meanValue; break; case '15-30cm': $phData['meter_15_30'] = $meanValue; break; case '30-60cm': $phData['meter_30_60'] = $meanValue; break; case '60-100cm': $phData['meter_60_100'] = $meanValue; break; case '100-200cm': $phData['meter_100_200'] = $meanValue; break; } } // Simpan data ke database PhVillage::updateOrCreate( ['village_id' => $village['id']], $phData ); // Periksa apakah struktur data sesuai harapan if (!isset($phData)) { throw new Exception("Struktur respons API tidak sesuai"); } } } catch (\Exception $e) { // Tangani kesalahan dan tampilkan pesan error return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 500); } } } public function getDataParameterListPhVillage($subDistrictId) { $listPhVillage = PhVillage::select( 'ph_villages.id as phv_id', 'ph_villages.village_id as phv_village_id', 'ph_villages.meter_0_5', 'ph_villages.meter_5_15', 'ph_villages.meter_15_30', 'ph_villages.meter_30_60', 'ph_villages.meter_60_100', 'ph_villages.meter_100_200', 'village.id as village_id', 'village.sub_district_id as sub_district_id', 'village.village', ) ->join('village', 'ph_villages.village_id', '=', 'village.id') ->where('village.sub_district_id', $subDistrictId) ->get(); return response()->json([ 'listPhVillage' => $listPhVillage ]); } }