intervle - app/Models/Event.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
use HasFactory;
protected $fillable = ['date', 'description'];
protected $casts = [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
public function scopeDailyRandom($query, $seed)
{
$count = $this->getCountFromSeed($seed);
return $query
->orderByRaw("md5(id::text || ?)", [$seed])
->limit($count);
}
public function scopeDailyRandomOrdered($query, $seed)
{
$count = $this->getCountFromSeed($seed);
$sub = self::query()
->orderByRaw("md5(id::text || ?)", [$seed])
->limit($count);
return $query
->fromSub($sub, 'daily_events')
->orderBy('date', 'asc');
}
private function getCountFromSeed($seed)
{
$difficultyMapping = [
'easy' => 5,
'medium' => 7,
'hard' => 10,
];
return $difficultyMapping[(preg_replace('/[0-9]+/', '', $seed))];
}
}