ldc-legaulois/app/Jobs/MainSlidesStatusUpdate.php
2025-06-11 09:59:07 +02:00

54 lines
2 KiB
PHP

<?php
namespace App\Jobs;
use App\Models\MainSlide;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
/**
* Update published attribute reading its
* published_at and unpublished_at attributes.
*/
class MainSlidesStatusUpdate
{
/**
* Called when the job will be executed.
*
* @return void
*/
public function handle(): void
{
/** @var \Illuminate\Database\Eloquent\Collection<array-key,\App\Models\MainSlide> */
$mainSlidesListToUnPublished = MainSlide::query()
->where('unpublished_at', '<=', Carbon::now())
->whereNotNull('unpublish_at')
->where('published', true)->get();
Log::debug(__CLASS__ . " mainSlides to unpublished " . $mainSlidesListToUnPublished->count());
foreach ($mainSlidesListToUnPublished as $mainSlide) {
$mainSlide->published_at = null;
$mainSlide->unpublished_at = null;
$mainSlide->published = false;
$mainSlide->saveOrFail();
}
/** @var \Illuminate\Database\Eloquent\Collection<array-key,\App\Models\MainSlide> */
$mainSlidesListToPublished = MainSlide::query()
->where('publish_at', '<=', Carbon::now())
->whereNotNull('publish_at')
->where('published', false)->get();
Log::debug(__CLASS__ . " mainSlides to publish " . $mainSlidesListToPublished->count());
// Unpublish all mainSlide with no date because only 1 mainSlide can be published.
if ($mainSlidesListToPublished->count()) {
MainSlide::query()->where('published', true)
->each(function (MainSlide $mainSlide) {
$mainSlide->published = false;
$mainSlide->saveOrFail();
});
}
foreach ($mainSlidesListToPublished as $mainSlide) {
$mainSlide->published_at = null;
$mainSlide->published = true;
$mainSlide->saveOrFail();
}
}
}