File: /var/www/heifetz/heifetz-app/jobs/AbstractJob.php
<?php
declare(strict_types=1);
namespace Jobs;
use Core\Models\CoreHelper;
use Helpers\Data;
use Helpers\Validator;
use Models\Job;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
abstract class AbstractJob
{
protected Logger $logger;
protected array $data = [];
private array $errors = [];
/** Возвращает правила валидации */
protected static function getRules(): array
{
return [];
}
/** Возвращает стандартные переводы для полей */
protected static function getTranslations(): array
{
return [];
}
public function validate(string $type = Validator::TYPE_UPDATE): array
{
if (empty(static::getRules())) {
return [];
}
$translations = empty($translations) ? static::getTranslations() : $translations;
return (new Validator(static::getRules()))->validate($this->data, $translations, $type);
}
public static function make(array $data = []): static
{
$job = new static();
if (!empty($data)) {
$job->setData($data);
}
$errors = $job->validate(Validator::TYPE_CREATE);
if (!empty($errors)) {
$job->errors = $errors;
}
return $job;
}
public function __construct()
{
$class = explode("\\", static::class);
$class = array_pop($class);
$this->logger = new Logger('jobs');
$fileName = ROOT . '/logs/' . date('Y-m-d_') . $class;
$this->logger->pushHandler(new StreamHandler($fileName . '.log'));
$this->logger->pushHandler(new StreamHandler($fileName . '.err.log', Logger::ERROR));
}
public function setData(array $data): static
{
$this->data = $data;
return $this;
}
public function create(): void
{
$job = new Job();
$job->name = static::class;
$job->data = Data::jsonEncode($this->data);
$job->company_id = CoreHelper::$companyId;
$job->created_at = date('Y-m-d H:i:s');
$job->updated_at = date('Y-m-d H:i:s');
$job->save();
}
abstract public function execute(): bool;
public function getErrors(): array
{
return $this->errors;
}
}