ajust countries function
This commit is contained in:
parent
f782796ef6
commit
5dec4e36ef
|
|
@ -18,6 +18,8 @@ use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Maatwebsite\Excel\Facades\Excel;
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
class HelperController extends Controller
|
class HelperController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -344,7 +346,61 @@ class HelperController extends Controller
|
||||||
|
|
||||||
public function allCountries()
|
public function allCountries()
|
||||||
{
|
{
|
||||||
$countries = Country::select('id', 'name', 'code_dial', 'code_country')->get();
|
// On utilise Cache::remember mais avec une vérification pour ne pas stocker de résultats vides
|
||||||
|
$countries = Cache::remember('countries_list', 86400, function () {
|
||||||
|
try {
|
||||||
|
// Ajout d'un timeout et désactivation SSL si nécessaire (pour certains environnements locaux)
|
||||||
|
$response = Http::timeout(60)
|
||||||
|
->withOptions(['verify' => false]) // Utile si vous avez des erreurs de certificat SSL
|
||||||
|
->get('https://restcountries.com/v3.1/all?fields=name,cca3,idd,translations,flag');
|
||||||
|
|
||||||
|
if ($response->failed()) {
|
||||||
|
Log::error("Échec API RestCountries : " . $response->status());
|
||||||
|
return null; // On retourne null pour que le cache ne soit pas enregistré
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $response->json();
|
||||||
|
|
||||||
|
if (empty($data)) return null;
|
||||||
|
|
||||||
|
return collect($data)->map(function ($country) {
|
||||||
|
// Gestion plus robuste du code de numérotation (Dial Code)
|
||||||
|
$dial = null;
|
||||||
|
if (!empty($country['idd']['root'])) {
|
||||||
|
$root = $country['idd']['root'];
|
||||||
|
// Certains pays (comme USA +1) ont beaucoup de suffixes, on prend le premier
|
||||||
|
$suffix = $country['idd']['suffixes'][0] ?? '';
|
||||||
|
$dial = $root . $suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'code_country' => $country['cca3'] ?? null,
|
||||||
|
'code_dial' => $dial,
|
||||||
|
'name_en' => $country['name']['common'] ?? null,
|
||||||
|
'name_fr' => $country['translations']['fra']['common']
|
||||||
|
?? $country['name']['common']
|
||||||
|
?? null,
|
||||||
|
'flag' => $country['flag'] ?? null, // Petit plus : l'emoji du drapeau
|
||||||
|
];
|
||||||
|
})
|
||||||
|
->filter(fn($c) => !empty($c['code_country'])) // On nettoie les éventuels pays mal formés
|
||||||
|
->sortBy('name_fr', SORT_NATURAL | SORT_FLAG_CASE) // Tri naturel (A, B, C...)
|
||||||
|
->values()
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("Exception lors de la récupération des pays : " . $e->getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 3. Si l'API a échoué et que le cache est vide, on renvoie une erreur au lieu d'un [] vide
|
||||||
|
if (is_null($countries) || empty($countries)) {
|
||||||
|
// Optionnel : Nettoyer le cache s'il est corrompu
|
||||||
|
Cache::forget('countries_list');
|
||||||
|
return $this->errorResponse("Impossible de charger la liste des pays pour le moment.", 503);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->successResponse($countries);
|
return $this->successResponse($countries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue