AdsHandler.php 1.06 KB
<?php
namespace App\Service\Handlers;

use App\Jobs\ProcessCallLimitedAPI;
use App\Service\Contract\API;
use App\Service\Contract\APIRequest;
use Illuminate\Support\Facades\Log;

class AdsHandler
{
    protected $request;
    protected $response;

    protected function __construct(APIRequest $request = null)
    {
        $this->request = $request;
    }

    static function getInstance(APIRequest $request = null)
    {
        switch ($request->getApi()) {
            case API::YANDEX:
                return new DirectHandler($request);
        }
        return new self($request);
    }

    public function handle($response)
    {
        $this->parse($response);

        $offset = $this->limited();

        if ($offset) {
            $this->request->next($offset);
            dispatch(new ProcessCallLimitedAPI($this->request))->onQueue('limits');;
        }
        $this->request->handle($this->response);
    }

    protected function limited()
    {
        return false;
    }

    protected function parse($response)
    {
        $this->response = $response;
    }
}