Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Services\Seeders;
- use App\Services\LanguageService;
- use GuzzleHttp\Client;
- use GuzzleHttp\Exception\GuzzleException;
- use Illuminate\Support\Collection;
- use Psr\Http\Message\ResponseInterface;
- /**
- * Class LanguageSeederService
- * @package App\Services\Seeders
- */
- class LanguageSeederService extends SeederService
- {
- /**
- * Seeding process runner
- * @throws GuzzleException
- */
- public function process(): void
- {
- /** @var LanguageService $languageService */
- $languageService = resolve(LanguageService::class);
- $this->getLanguages()
- ->each(function ($language, $key) use ($languageService) {
- $languageService->getBuilder()
- ->firstOrCreate([
- 'code' => $key,
- 'title' => $language
- ]);
- });
- }
- /**
- * @return Collection
- * @throws GuzzleException
- */
- private function getLanguages(): Collection
- {
- $languages = collect();
- $countries = collect($this->prepareClient());
- $countries->each(function ($country) use (&$languages) {
- collect($country['languages'])
- ->each(function ($languageDetails) use (&$languages) {
- $languageCode = $languageDetails['iso639_1'] ?? $languageDetails['iso639_2'];
- $nativeName = trim($languageDetails['nativeName']);
- if (!$languages->has($languageCode)) $languages->put($languageCode, $nativeName);
- });
- });
- return $languages;
- }
- /**
- * Returns a list of countries
- *
- * @return array
- * @throws GuzzleException
- */
- private function prepareClient()
- {
- $url = 'https://restcountries.eu/rest/v2/all';
- $httpClient = new Client(['verify' => false]);
- return $this->parseResponse($httpClient->get($url));
- }
- /**
- * @param ResponseInterface $response
- * @return mixed
- */
- private function parseResponse(ResponseInterface $response)
- {
- return json_decode($response->getBody()->getContents(), true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment