CheckCampaignsChange.php 2.3 KB
<?php

namespace App\Service\Requests\Direct;

use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign;
use App\Service\Requests\DirectRequest;
use Carbon\Carbon;

class CheckCampaignsChange extends DirectRequest
{
    CONST SELF = 'SELF';
    CONST CHILDREN = 'CHILDREN';
    CONST STAT = 'STAT';

    protected $next;

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

    function handle($response)
    {
        foreach ($response['result']['Campaigns'] as $campaign_data) {
            if (in_array(self::SELF, $campaign_data['ChangesIn']) || in_array(self::CHILDREN, $campaign_data['ChangesIn'])) {
                $data = [];

                if (in_array(self::SELF, $campaign_data['ChangesIn'])) {
                    $data['updated_self'] = Carbon::now();
                }

                if (in_array(self::CHILDREN, $campaign_data['ChangesIn'])) {
                    $data['updated_children'] = Carbon::now();
                }

                $external_id = $campaign_data['CampaignId'];

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

                    $data['external_id'] = $external_id;
                    $data['token'] = $this->getToken()->getKey();

                    Campaigns::updateOrCreate([
                        'external_id' => $external_id
                    ], $data);

                } else {

                    $dictionaryCampaign = DictionaryCampaign::synchronized()->find($external_id);

                    if ($dictionaryCampaign) {
                        $data['external_updated_at'] = Carbon::now();
                        $dictionaryCampaign->update($data);
                    }

                }
            }
        }
        $this->getToken()->update([
            'check_changes_campaign' => Carbon::createFromTimestamp($response['result']['Timestamp']),
        ]);
        $this->setToken($this->getToken()->refresh());
    }

    private function requestPrepare($params)
    {
        $this->setService('changes');
        $this->setMethod('checkCampaigns');
        $this->setParams([
            'Timestamp' => $this->getToken()->check_changes_campaign_at->toIso8601ZuluString(),
        ]);
    }
}