ldc-legaulois/app/Jobs/MainSlidesStatusUpdate.php
2024-04-09 10:16:51 +02:00

54 lines
1.9 KiB
PHP

<?php
namespace App\Jobs;
use App\Models\MainSlide;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
/**
* Update published attribute reading its
* publish_at and unpublish_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> */
$mainSlidesListToUnPublish = MainSlide::query()
->where('unpublish_at', '<=', Carbon::now())
->whereNotNull('unpublish_at')
->where('published', true)->get();
Log::debug(__CLASS__ . " mainSlides to unpublish " . $mainSlidesListToUnPublish->count());
foreach ($mainSlidesListToUnPublish as $mainSlide) {
$mainSlide->publish_at = null;
$mainSlide->unpublish_at = null;
$mainSlide->published = false;
$mainSlide->saveOrFail();
}
/** @var \Illuminate\Database\Eloquent\Collection<array-key,\App\Models\MainSlide> */
$mainSlidesListToPublish = MainSlide::query()
->where('publish_at', '<=', Carbon::now())
->whereNotNull('publish_at')
->where('published', false)->get();
Log::debug(__CLASS__ . " mainSlides to publish " . $mainSlidesListToPublish->count());
// Unpublish all mainSlide with no date because only 1 mainSlide can be published.
if ($mainSlidesListToPublish->count()) {
MainSlide::query()->where('published', true)
->each(function (MainSlide $mainSlide) {
$mainSlide->published = false;
$mainSlide->saveOrFail();
});
}
foreach ($mainSlidesListToPublish as $mainSlide) {
$mainSlide->publish_at = null;
$mainSlide->published = true;
$mainSlide->saveOrFail();
}
}
}