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\Mail;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class HelperController extends Controller
|
||||
{
|
||||
|
|
@ -344,7 +346,61 @@ class HelperController extends Controller
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue