ldc-legaulois/app/Jobs/DemarcheSlidesStatusUpdate.php
2024-10-24 08:45:29 +00:00

54 lines
2.1 KiB
PHP

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