Backend for songs.zachdecook.com
Songs page: seed the random order for suggestions
| -rw-r--r-- | laravel/app/Http/Controllers/SongController.php | 6 | ||||
| -rw-r--r-- | laravel/app/Song.php | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/laravel/app/Http/Controllers/SongController.php b/laravel/app/Http/Controllers/SongController.php index 4e4dee5..301e469 100644 --- a/laravel/app/Http/Controllers/SongController.php +++ b/laravel/app/Http/Controllers/SongController.php @@ -65,9 +65,11 @@ class SongController extends Controller $params['next'] = Song::where('id', '>', $song->id)->orderBy('id', 'asc' )->first(); } if ($playlist){ - $params['suggestions'] = $playlist->songs()->inRandomOrder()->limit(5)->get(); + $params['suggestions'] = $playlist->songs()->inRandomOrderSeeded($song->id)->limit(5)->get(); } else { - $params['suggestions'] = Song::inRandomOrder()->limit(5)->get(); + $params['suggestions'] = Song::query() + ->inRandomOrderSeeded($song->id) + ->limit(5)->get(); $plName = ($user->name ?? 'anon') . 'favs'; if(! $song->playlists()->where('name',$plName)->exists()){ $params['addToPlaylist'] = ($user->name ?? 'anon') . 'favs'; diff --git a/laravel/app/Song.php b/laravel/app/Song.php index b8d2e4c..ed2bf25 100644 --- a/laravel/app/Song.php +++ b/laravel/app/Song.php @@ -3,6 +3,7 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\DB; use App\Http\Controllers\SongController; use TechWilk\BibleVerseParser\BiblePassageParser; @@ -13,6 +14,11 @@ class Song extends Model { return $this->belongsToMany('App\Playlist'); } + public function scopeInRandomOrderSeeded($query, $id = 0) { + $seed = ((intval(now()->unix()/600) . $id)%100000)/100000; + DB::query()->selectRaw("SETSEED($seed)")->get(); + $query->inRandomOrder(); + } public static function whereVerse($passage) { $parser = new BiblePassageParser(); |