HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode/app/Console/Commands/SendGridUpdateLists.php
<?php

namespace App\Console\Commands;

use App\Models\SendGridList;
use Exception;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use SendGrid;
use Symfony\Component\Console\Command\Command as CommandAlias;

class SendGridUpdateLists extends Command
{

    protected $signature = 'send-grid:update-lists';

    protected $description = 'Updating SendGrid marketing lists';

    const LOG_CHANNEL = 'sendGrid';

    public function handle(): int
    {
        $apiKey = env('SENDGRID_API_KEY');
        if (empty($apiKey)) {
            $this->error('Need to fill SENDGRID_API_KEY in .env');
        }

        $this->info($this->description);

        try {
            $sendGrid = new SendGrid($apiKey);
            $response = $sendGrid->client->marketing()->lists()->get();
            $data = json_decode($response->body(), true);
            if (JSON_ERROR_NONE != json_last_error()) {
                throw new Exception('Json parse error: ' . json_last_error());
            }

            $code = $response->statusCode();
            $responseData = [
                'code' => $code,
                'headers' => $response->headers(),
                'body' => $data,
            ];

            if (202 === $code) {
                Log::channel(self::LOG_CHANNEL)->info('Get All Lists', $responseData);
            } else {
                Log::channel(self::LOG_CHANNEL)->error('Get All Lists', $responseData);
            }
        } catch (Exception $exception) {
            Log::channel(self::LOG_CHANNEL)->error('Get All Lists error: ' . $exception->getMessage());

            throw $exception;
        }

        if (empty($data['result'])) {
            $this->error('Data result is empty');
        }

        $createdCount = 0;
        foreach ($data['result'] as $list) {
            /** @var SendGridList $sendGridList */
            $sendGridList = SendGridList::query()->findOrNew($list['id']);
            if (empty($sendGridList->attributesToArray())) {
                $createdCount++;
            }
            $sendGridList->id = $list['id'];
            $sendGridList->name = $list['name'];
            $sendGridList->save();
        }
        if (empty($createdCount)) {
            $this->info('Nothing created');
        } else {
            $this->info('Created: ' . $createdCount);
        }

        return CommandAlias::SUCCESS;
    }

}