Romanovich095

Custom LanguageSeederService class

Feb 13th, 2021
833
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.21 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Services\Seeders;
  4.  
  5. use App\Services\LanguageService;
  6. use GuzzleHttp\Client;
  7. use GuzzleHttp\Exception\GuzzleException;
  8. use Illuminate\Support\Collection;
  9. use Psr\Http\Message\ResponseInterface;
  10.  
  11. /**
  12.  * Class LanguageSeederService
  13.  * @package App\Services\Seeders
  14.  */
  15. class LanguageSeederService extends SeederService
  16. {
  17.  
  18.     /**
  19.      * Seeding process runner
  20.      * @throws GuzzleException
  21.      */
  22.     public function process(): void
  23.     {
  24.         /** @var LanguageService $languageService */
  25.         $languageService = resolve(LanguageService::class);
  26.         $this->getLanguages()
  27.             ->each(function ($language, $key) use ($languageService) {
  28.                 $languageService->getBuilder()
  29.                     ->firstOrCreate([
  30.                         'code' => $key,
  31.                         'title' => $language
  32.                     ]);
  33.             });
  34.     }
  35.  
  36.     /**
  37.      * @return Collection
  38.      * @throws GuzzleException
  39.      */
  40.     private function getLanguages(): Collection
  41.     {
  42.         $languages = collect();
  43.         $countries = collect($this->prepareClient());
  44.  
  45.         $countries->each(function ($country) use (&$languages) {
  46.             collect($country['languages'])
  47.                 ->each(function ($languageDetails) use (&$languages) {
  48.                     $languageCode = $languageDetails['iso639_1'] ?? $languageDetails['iso639_2'];
  49.                     $nativeName = trim($languageDetails['nativeName']);
  50.  
  51.                     if (!$languages->has($languageCode)) $languages->put($languageCode, $nativeName);
  52.                 });
  53.         });
  54.  
  55.         return $languages;
  56.     }
  57.  
  58.     /**
  59.      * Returns a list of countries
  60.      *
  61.      * @return array
  62.      * @throws GuzzleException
  63.      */
  64.     private function prepareClient()
  65.     {
  66.         $url = 'https://restcountries.eu/rest/v2/all';
  67.         $httpClient = new Client(['verify' => false]);
  68.  
  69.         return $this->parseResponse($httpClient->get($url));
  70.     }
  71.  
  72.     /**
  73.      * @param ResponseInterface $response
  74.      * @return mixed
  75.      */
  76.     private function parseResponse(ResponseInterface $response)
  77.     {
  78.         return json_decode($response->getBody()->getContents(), true);
  79.     }
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment