Backend for songs.zachdecook.com
Songs page: seed the random order for suggestions
Zach DeCook 9 months ago
parent 336838e · commit 9e8949e
-rw-r--r--laravel/app/Http/Controllers/SongController.php6
-rw-r--r--laravel/app/Song.php6
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();