GetDictionaries.php 1.47 KB
<?php

namespace App\Service\Requests\Direct;

use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Dictionary;
use App\Service\Requests\DirectRequest;
use Illuminate\Support\Facades\Log;

class GetDictionaries extends DirectRequest
{
    function call($params = null)
    {
        $this->requestPrepare($params);
        $process = new ProcessCallLimitedAPI($this);
        dispatch($process)->onQueue('limits');
    }

    function handle($response)
    {
        try {
            $data = collect();

            foreach ($response['result']['GeoRegions'] as $region) {
                $data->push([
                    'region_id' => $region['GeoRegionId'],
                    'parent_id' => $region['ParentId'],
                    'name' => $region['GeoRegionName'],
                    'type' => $region['GeoRegionType'],
                ]);
            }

            foreach ($data->chunk(100) as $list) {
                Dictionary::upsert($list->toArray(), [
                    'region_id'
                ], [
                    'parent_id',
                    'name',
                    'type',
                ]);
            }
        } catch (\Exception $e) {
            Log::debug($e);
        }
    }

    private function requestPrepare($params)
    {
        $this->setService('dictionaries');
        $this->setMethod('get');
        $params = [
            'DictionaryNames' => [
                "GeoRegions",
            ],
        ];
        $this->setParams($params);
    }
}