auditionadmin/app/Services/AuditionCacheService.php

54 lines
1.2 KiB
PHP

<?php
namespace App\Services;
use App\Models\Audition;
use App\Models\ScoringGuide;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Cache;
class AuditionCacheService
{
protected $cacheKey = 'auditions';
/**
* Create a new class instance.
*/
public function __construct()
{
//
}
/**
* Return or fill cache of auditions including the audition,
* scoringGuide.subscores, judges, judges_count, and entries_count
* @return Collection
*/
public function getAuditions(): \Illuminate\Database\Eloquent\Collection
{
return Cache::rememberForever($this->cacheKey, function () {
return Audition::with(['scoringGuide.subscores','judges'])
->withCount('judges')
->withCount('entries')
->orderBy('score_order')
->get()
->keyBy('id');
});
}
public function getAudition($id): Audition
{
return $this->getAuditions()->firstWhere('id',$id);
}
public function refreshCache()
{
Cache::forget($this->cacheKey);
$this->getAuditions();
}
public function clearCache()
{
Cache::forget($this->cacheKey);
}
}