59 lines
1.3 KiB
PHP
59 lines
1.3 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App;
|
||
|
|
||
|
use App\Thread;
|
||
|
use Illuminate\Database\Eloquent\Model;
|
||
|
|
||
|
class Job extends Model
|
||
|
{
|
||
|
const UPDATED_AT = null;
|
||
|
|
||
|
public $payload_decoded = null;
|
||
|
|
||
|
/**
|
||
|
* Automatically converted into Carbon dates.
|
||
|
*/
|
||
|
protected $dates = ['created_at', 'available_at', 'reserved_at'];
|
||
|
|
||
|
public function getPayloadDecoded()
|
||
|
{
|
||
|
if ($this->payload_decoded !== null) {
|
||
|
return $this->payload_decoded;
|
||
|
}
|
||
|
|
||
|
$this->payload_decoded = json_decode($this->payload, true);
|
||
|
|
||
|
return $this->payload_decoded;
|
||
|
}
|
||
|
|
||
|
public function getCommand()
|
||
|
{
|
||
|
return self::getPayloadCommand($this->getPayloadDecoded());
|
||
|
}
|
||
|
|
||
|
public function getCommandLastThread()
|
||
|
{
|
||
|
$command = $this->getCommand();
|
||
|
if ($command && !empty($command->threads)) {
|
||
|
return Thread::getLastThread($command->threads);
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public static function getPayloadCommand($payload)
|
||
|
{
|
||
|
if (empty($payload['data']) || empty($payload['data']['command'])) {
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
// If some record has been deleted from DB, there will be an error:
|
||
|
// No query results for model [App\Conversation].
|
||
|
return unserialize($payload['data']['command']);
|
||
|
} catch (\Exception $e) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
}
|