File: /var/www/heifetz/heifetz-app/models/NewAbstractMessageQueue.php
<?php
declare(strict_types=1);
namespace Models;
use Core\DbLib\NewDbModel;
use Traits\ModelGetQuery;
/**
* @property int $id
* @property int $status
* @property string $send_at
* @property string $last_error
*/
abstract class NewAbstractMessageQueue extends NewDbModel
{
use ModelGetQuery;
const STATUS_NEW = 0;
const STATUS_IN_PROGRESS = 1;
const STATUS_SENT = 2;
const STATUS_PAUSED = 3;
const STATUS_DELIVERED = 4;
const STATUS_CANCELED = 5;
const STATUS_ERROR = 6;
const STATUS_VIEWED = 7;
const STATUS_NOT_DELIVERED = 8;
static array $statuses = [
self::STATUS_NEW => 'Новая',
self::STATUS_IN_PROGRESS => 'В процессе',
self::STATUS_SENT => 'Выполнена',
self::STATUS_PAUSED => 'Остановлена',
self::STATUS_DELIVERED => 'Доставлена',
self::STATUS_CANCELED => 'Отменена',
self::STATUS_ERROR => 'Ошибка',
self::STATUS_VIEWED => 'Просмотрено',
self::STATUS_NOT_DELIVERED => 'Не доставлена',
];
/** @return static[] */
public static function getMessagesToSend(): array
{
return self::model()->where('status = ?', static::STATUS_NEW)->order('id')->fetchAll();
}
public function setStatus(int $status, ?string $lastError = null): void
{
$this->status = $status;
$this->last_error = $lastError;
$this->save();
}
public function setStatusInProgress(): void
{
$this->setStatus(self::STATUS_IN_PROGRESS);
}
public function setStatusSent(): void
{
$this->send_at = date('Y-m-d H:i:s');
$this->setStatus(self::STATUS_SENT);
}
public function setStatusNew(?string $lastError = null): void
{
$this->setStatus(self::STATUS_NEW, $lastError);
}
public function setStatusError(?string $lastError = null): void
{
$this->setStatus(self::STATUS_ERROR, $lastError);
}
}