GetAdImages.php 2.84 KB
<?php

namespace App\Service\Requests\Direct;

use App\Jobs\ProcessCallLimitedAPI;
use App\Models\AdImage;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
use Illuminate\Support\Facades\Log;

class GetAdImages extends DirectRequest
{
    protected $max_count = -1;
    protected $max_count_AdImageHashes = 10000;

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

    public function getObjectsCount()
    {
        $params = $this->getParams();
        if (isset($params['SelectionCriteria']['AdImageHashes'])) {
            return count($params['SelectionCriteria']['AdImageHashes']);
        }
        return -1;
    }

    public function slice($maxObjects): ?APIRequest
    {
        $params = $this->getParams();

        if (isset($params['SelectionCriteria']['AdImageHashes'])) {
            return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'AdImageHashes']);
        }

        return null;
    }

    function handle($response)
    {
        if (isset($response['result']['AdImages'])) {
            foreach ($response['result']['AdImages'] as $ad_image) {

                $hash = (string)$ad_image['AdImageHash'];
                $original_url = $ad_image['OriginalUrl'];

                if ($this->getToken()->isMain()) {

                    if (!$original_url) {
                        Log::debug("GetAdImage, empty OriginalUrl, token_id {$this->getToken()->getKey()}");
                        Log::debug($ad_image);
                        continue;
                    }

                    $data = [
                        'hash' => $hash,
                        'name' => $ad_image['Name'],
                        'type' => $ad_image['Type'],
                        'subtype' => $ad_image['Subtype'],
                        'original_url' => $original_url,
                        'preview_url' => $ad_image['PreviewUrl'],
                    ];

                    $adImage = AdImage::updateOrCreate([
                        'hash' => $hash
                    ], $data);

                } else {
                    //
                }

            }
        }
    }

    private function requestPrepare($filter)
    {
        $this->setService('AdImages');
        $this->setMethod('get');
        $params = [
            "SelectionCriteria" => [
                'Associated' => 'YES',
            ],
            "FieldNames" => [
                "AdImageHash", "OriginalUrl", "PreviewUrl",
                "Name", "Type", "Subtype"
            ],
        ];
        if (isset($filter['Ids'])) {

            $this->max_count = $this->max_count_AdImageHashes;

            $params['SelectionCriteria']['AdImageHashes'] = $filter['AdImageHashes'];
        }
        $this->setParams($params);
    }
}