Код: Выделить всё
class SetTrackableJobProcessingStatus
{
/**
* Create the event listener.
*/
public function __construct(
public TrackableJobUpdater $updater,
) {}
/**
* Handle the event.
*/
public function handle(JobProcessing $event): void
{
$jobUuid = $event->job->uuid();
if ($this->updater->trackableJobModelExists($jobUuid)) {
$trackableJobModel = $this->updater->retrieveTrackableJobModel($jobUuid);
$this->updater->setProcessingStatus($trackableJobModel);
}
}
}
Код: Выделить всё
class TrackableJobUpdater
{
/**
* Set the job status to processing and update the started_at timestamp.
*/
public function setProcessingStatus(TrackableJob $trackableJob): bool
{
return $trackableJob->update([
'status' => Status::Processing,
'started_at' => now(),
]);
}
/**
* Determine if a trackable job model exists for a job using its uuid.
*/
public function trackableJobModelExists(string $uuid): bool
{
return TrackableJob::where('job_uuid', $uuid)->exists();
}
/**
* Retrieve a trackable job model using a job uuid.
*/
public function retrieveTrackableJobModel(string $uuid): TrackableJob
{
return TrackableJob::where('job_uuid', $uuid)->sole();
}
}
Код: Выделить всё
class SetTrackableJobQueuedStatusTest extends TestCase
{
use RefreshDatabase;
public function test_listens_to_laravel_job_queued_event(): void
{
Event::fake();
Event::assertListening(JobQueued::class, SetTrackableJobQueuedStatus::class);
}
}
Код: Выделить всё
public function test_updates_processing_status()
{
$jobProcessingEventListener = new SetTrackableJobProcessingStatus(new TrackableJobUpdater());
$jobProcessingEventListener->handle(new JobProcessing('default', new TrackedSuccessfulJob()));
}
Но это дает мне предупреждение:
Ожидается параметр типа '\Illuminate\Contracts\Queue\Job'
И ошибка:
Вызов неопределенного метода uuid() в
Простая диспетчеризация задание типа TrackedSuccessfulJob::dispatch(); не отправляет все события. Например, событие JobQueued не отправляется.
Подробнее здесь: https://stackoverflow.com/questions/786 ... eue-events